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-кода также принимаются)
Заранее спасибо.
1 ответ
Проблема в том, что мне нужно изменить listWithData на другой, но когда я делаю это, onSwipe не учитывает никаких изменений.
Вы могли бы написать Interface
слушать событие увольнения из ItemTouchHelper.Callback
:
public interface IItemHelper
{
//Called when an item has been dismissed by a swipe.
void onItemDismiss(int position);
}
Воплощать в жизнь IItemHelper
интерфейс в вашем RecyclerViewAdapter
учебный класс:
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);
}
}
Когда вы проводите Предмет, скажите адаптеру отклонить этот предмет:
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);
}
}
Эффект, как это.