using System;
|
using Android.OS;
|
using Android.Support.V7.Widget;
|
using Android.Views;
|
using Android.Widget;
|
using Android.Support.V4.Widget;
|
using Android.App;
|
using Android.Content;
|
|
namespace ezxamairn.Droid
|
{
|
public class BrowseFragment : Android.Support.V4.App.Fragment, IFragmentVisible
|
{
|
public static BrowseFragment NewInstance() =>
|
new BrowseFragment { Arguments = new Bundle() };
|
|
BrowseItemsAdapter adapter;
|
SwipeRefreshLayout refresher;
|
|
ProgressBar progress;
|
public static ItemsViewModel ViewModel { get; set; }
|
|
public override void OnCreate(Bundle savedInstanceState)
|
{
|
base.OnCreate(savedInstanceState);
|
|
// Create your fragment here
|
}
|
|
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
|
{
|
ViewModel = new ItemsViewModel();
|
|
View view = inflater.Inflate(Resource.Layout.fragment_browse, container, false);
|
var recyclerView =
|
view.FindViewById<RecyclerView>(Resource.Id.recyclerView);
|
|
recyclerView.HasFixedSize = true;
|
recyclerView.SetAdapter(adapter = new BrowseItemsAdapter(Activity, ViewModel));
|
|
refresher = view.FindViewById<SwipeRefreshLayout>(Resource.Id.refresher);
|
refresher.SetColorSchemeColors(Resource.Color.accent);
|
|
progress = view.FindViewById<ProgressBar>(Resource.Id.progressbar_loading);
|
progress.Visibility = ViewStates.Gone;
|
|
return view;
|
}
|
|
public override void OnStart()
|
{
|
base.OnStart();
|
|
refresher.Refresh += Refresher_Refresh;
|
adapter.ItemClick += Adapter_ItemClick;
|
|
if (ViewModel.Items.Count == 0)
|
ViewModel.LoadItemsCommand.Execute(null);
|
}
|
|
public override void OnStop()
|
{
|
base.OnStop();
|
refresher.Refresh -= Refresher_Refresh;
|
adapter.ItemClick -= Adapter_ItemClick;
|
}
|
|
void Adapter_ItemClick(object sender, RecyclerClickEventArgs e)
|
{
|
var item = ViewModel.Items[e.Position];
|
var intent = new Intent(Activity, typeof(BrowseItemDetailActivity));
|
|
intent.PutExtra("data", Newtonsoft.Json.JsonConvert.SerializeObject(item));
|
Activity.StartActivity(intent);
|
}
|
|
void Refresher_Refresh(object sender, EventArgs e)
|
{
|
ViewModel.LoadItemsCommand.Execute(null);
|
refresher.Refreshing = false;
|
}
|
|
public void BecameVisible()
|
{
|
|
}
|
}
|
|
class BrowseItemsAdapter : BaseRecycleViewAdapter
|
{
|
ItemsViewModel viewModel;
|
Activity activity;
|
|
public BrowseItemsAdapter(Activity activity, ItemsViewModel viewModel)
|
{
|
this.viewModel = viewModel;
|
this.activity = activity;
|
|
this.viewModel.Items.CollectionChanged += (sender, args) =>
|
{
|
this.activity.RunOnUiThread(NotifyDataSetChanged);
|
};
|
}
|
|
// Create new views (invoked by the layout manager)
|
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
|
{
|
//Setup your layout here
|
View itemView = null;
|
var id = Resource.Layout.item_browse;
|
itemView = LayoutInflater.From(parent.Context).Inflate(id, parent, false);
|
|
var vh = new MyViewHolder(itemView, OnClick, OnLongClick);
|
return vh;
|
}
|
|
// Replace the contents of a view (invoked by the layout manager)
|
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
|
{
|
var item = viewModel.Items[position];
|
|
// Replace the contents of the view with that element
|
var myHolder = holder as MyViewHolder;
|
myHolder.TextView.Text = item.Text;
|
myHolder.DetailTextView.Text = item.Description;
|
}
|
|
public override int ItemCount => viewModel.Items.Count;
|
}
|
|
public class MyViewHolder : RecyclerView.ViewHolder
|
{
|
public TextView TextView { get; set; }
|
public TextView DetailTextView { get; set; }
|
|
public MyViewHolder(View itemView, Action<RecyclerClickEventArgs> clickListener,
|
Action<RecyclerClickEventArgs> longClickListener) : base(itemView)
|
{
|
TextView = itemView.FindViewById<TextView>(Android.Resource.Id.Text1);
|
DetailTextView = itemView.FindViewById<TextView>(Android.Resource.Id.Text2);
|
itemView.Click += (sender, e) => clickListener(new RecyclerClickEventArgs { View = itemView, Position = AdapterPosition });
|
itemView.LongClick += (sender, e) => longClickListener(new RecyclerClickEventArgs { View = itemView, Position = AdapterPosition });
|
}
|
}
|
}
|