1. 程式人生 > >Xamarin. Android實現下拉重新整理功能

Xamarin. Android實現下拉重新整理功能

public class MvxPullToRefreshListView:PullToRefreshListView,PullToRefreshBase.IOnRefreshListener { public MvxPullToRefreshListView(Context context, IAttributeSet attrs) : this(context, attrs, new MvxAdapter(context)) { } public MvxPullToRefreshListView(Context context, IAttributeSet attrs, IMvxAdapter adapter) :
base(context, attrs) { Mode = PullToRefreshMode.Both; if (adapter == null) return; var itemTemplateId = MvxAttributeHelpers.ReadListItemTemplateId(context, attrs); adapter.ItemTemplateId = itemTemplateId; var
lv = (ListView) RefreshableView; lv.Adapter = adapter; base.SetOnRefreshListener(this); } public IMvxAdapter Adapter { get { var v = ((ListView)RefreshableView); var adapter=((HeaderViewListAdapter) v.Adapter).WrappedAdapter as
IMvxAdapter; return adapter; } set { var existing = Adapter; if (existing == value) return; if (value != null && existing != null) { value.ItemsSource = existing.ItemsSource; value.ItemTemplateId = existing.ItemTemplateId; } var v = ((ListView)base.RefreshableView); v.Adapter = value; } } [MvxSetToNullAfterBinding] public IEnumerable ItemsSource { get { return Adapter.ItemsSource; } set { Adapter.ItemsSource = value; } } public bool IsLoading { get { return Refreshing; } set { if (!value) { OnRefreshComplete(); } } } public int ItemTemplateId { get { return Adapter.ItemTemplateId; } set { Adapter.ItemTemplateId = value; } } private ICommand _itemClick; public new ICommand ItemClick { get { return _itemClick; } set { _itemClick = value; if (_itemClick != null) EnsureItemClickOverloaded(); } } private bool _itemClickOverloaded = false; private void EnsureItemClickOverloaded() { if (_itemClickOverloaded) return; _itemClickOverloaded = true; var v = ((ListView)base.RefreshableView); v.ItemClick += (sender, args) => ExecuteCommandOnItem(this.ItemClick, args.Position); } private ICommand _itemLongClick; public new ICommand ItemLongClick { get { return _itemLongClick; } set { _itemLongClick = value; if (_itemLongClick != null) EnsureItemLongClickOverloaded(); } } private bool _itemLongClickOverloaded = false; private void EnsureItemLongClickOverloaded() { if (_itemLongClickOverloaded) return; _itemLongClickOverloaded = true; var v = ((ListView)base.RefreshableView); v.ItemLongClick += (sender, args) => ExecuteCommandOnItem(this.ItemLongClick, args.Position); } protected virtual void ExecuteCommandOnItem(ICommand command, int position) { if (command == null) return; var item = Adapter.GetRawItem(position); if (item == null) return; if (!command.CanExecute(item)) return; command.Execute(item); } public ICommand RefreshCommand { get; set; } #region IOnRefreshListener Members public void OnRefresh(PullToRefreshBase p0) { var lastUpdatedLabel = string.Format("上次更新:{0:T}", DateTime.Now); p0.LoadingLayoutProxy.SetLastUpdatedLabel(lastUpdatedLabel); if (RefreshCommand != null) { if (RefreshCommand.CanExecute(null)) { RefreshCommand.Execute(null); } } } #endregion }