2017-07-31 19 views
0

所以,我創建了一個類來處理滑動事件更新的數據:ItemTouchHelper onSwiped()不從構造

public class CardViewSwipeListener : ItemTouchHelper.Callback 
{ 
    private Context context; 
    private List<Person> listWithData; 
    private const int RESET_ADAPTER = 1; 

    public CardViewSwipeListener(Context context, List<Person> listWithData) 
    { 
     this.context = context; 
     this.listWithData = listWithData; 
    } 

    public override int GetMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) 
    { 
     int swipeFlags = ItemTouchHelper.Start | ItemTouchHelper.End; 
     return MakeMovementFlags(0, swipeFlags); 
    } 

    public override bool OnMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) 
    { 
     return true; 
    } 

    public override void OnSwiped(RecyclerView.ViewHolder viewHolder, int direction) 
    { 
     if (direction == ItemTouchHelper.End) 
     { 
      ((Activity)context).StartActivityForResult(new Intent(Intent.ActionCall, Android.Net.Uri.Parse(string.Format("tel:{0}", listWithData[viewHolder.AdapterPosition].PhoneNumber))),RESET_ADAPTER); 
      Toast.MakeText(context,"Call "+listWithData[viewHolder.AdapterPosition].Name,ToastLength.Short).Show(); 
     } 
     else if (direction == ItemTouchHelper.Start) 
     { 
      ((Activity)context).StartActivityForResult(new Intent(Intent.ActionView, Android.Net.Uri.Parse(string.Format("sms:{0}", this.listWithData[viewHolder.AdapterPosition].PhoneNumber))),RESET_ADAPTER; 
      Toast.MakeText(context, "SMS " + this.listWithData[viewHolder.AdapterPosition].Name, ToastLength.Short).Show(); 
     } 
    } 
} 

在MainActivivty的onCreate我用下面的代碼以提供回收視圖處理滑動事件。

 itemTouchHelper = new ItemTouchHelper(new CardViewSwipeListener(this, listWithData)); 

     recycler = FindViewById<RecyclerView>(Resource.Id.recycler); 
     recycler.HasFixedSize = true; 
     layoutManager = new LinearLayoutManager(this); 
     recycler.SetLayoutManager(layoutManager); 
     recycler.SetAdapter(new RecyclerViewAdapter(listWithData,this)); 
     itemTouchHelper.AttachToRecyclerView(recycler); 

問題是,我需要將listWithData更改爲另一個,但是當我這樣做onSwipe不考慮任何更改。

沒有結果:

itemTouchHelper = new ItemTouchHelper(new CardViewSwipeListener(this, NewList)); 
     recycler.SetAdapter(new RecyclerViewAdapter(NewList,this)); 
     itemTouchHelper.AttachToRecyclerView(recycler); 

Java代碼的解決方案也被接受)

在此先感謝。

+0

GetView是在你設置新的適配器時調用的嗎? –

回答

1

問題是我需要將listWithData更改爲另一個,但是當我這樣做onSwipe不考慮任何更改。

你可以寫一個Interface偵聽從ItemTouchHelper.Callback解僱事件:

public interface IItemHelper 
{ 
    //Called when an item has been dismissed by a swipe. 
    void onItemDismiss(int position); 
} 

RecyclerViewAdapter類實現IItemHelper接口:

public class MyRecyclerViewAdapter : RecyclerView.Adapter,IItemHelper 
{ 
    List<string> items; 

    ... 

    public MyRecyclerViewAdapter(List<string> data) 
    { 
     items = data; 
    } 

    ... 

    //Called when an item has been dismissed by a swipe. 
    public void onItemDismiss(int position) 
    { 
     items.RemoveAt(position); 
     NotifyItemRemoved(position); 
    } 
} 

當你SWIP一個項目,告訴取消此項的適配器:

public class CardViewSwipeListener : ItemTouchHelper.Callback 
{ 
    ... 

    public override void OnSwiped(RecyclerView.ViewHolder viewHolder, int direction) 
    { 
     if (direction == ItemTouchHelper.End) 
     { 
      ... 
     } 
     else if (direction == ItemTouchHelper.Start) 
     { 
      ... 
     } 
     recyclerViewAdapter.onItemDismiss(viewHolder.AdapterPosition); 
    } 
} 

類似this的效果。

+0

@Dmitry Ushkevich,你解決了你的問題嗎? –

+0

沉今天休息一天,明天我會試試你的解決方案,thx提前 –

+0

@Dmitry Ushkevich,有什麼問題嗎? –