【发布时间】:2019-10-14 17:45:40
【问题描述】:
大家好,我叫谷口
我已经实现了一个 recyclerview 并插入了一个按钮导航视图来删除选定的项目。
当我在 recyclerview 中单击一个项目时,我会选择一个项目。我插入了一个集合来存储项目位置,当我单击时,当项目未选中时,我从集合中删除项目位置
例如,我能够在 recyclerview 上删除多个项目,但其中一项被错误删除。我选择了两个位置 0 和位置 1 我单击删除两者,但不是删除位置 1,而是删除位置 3 的项目,并继续选择位置 2 的项目。
我怎样才能正确删除它?
我的 recyclerview 适配器:
public class RecyclerAdapter : RecyclerView.Adapter, View.IOnClickListener
{
private List<Email> mEmails;
private Activity mActivity;
public static int listPosition;
private List<collectPosition> mcollectID;
private int position_collectID = 0;
private Boolean isSelected = false;
public Boolean IsSelected()
{
return isSelected;
}
public void setSelected(Boolean selected)
{
isSelected = selected;
}
public RecyclerAdapter(List<Email> emails, Activity activity)
{
mEmails = emails;
mActivity = activity;
}
public override int ItemCount => mEmails.Count;
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View row = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.row, parent, false);
RecyclerViewHolder view = new RecyclerViewHolder(row);
return view;
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
RecyclerViewHolder myHolder = holder as RecyclerViewHolder;
myHolder.mDate.Text = ((Email)mEmails[position]).date;
myHolder.mSubject.Text = ((Email)mEmails[position]).Subject;
myHolder.mMessage.Text = ((Email)mEmails[position]).Message;
myHolder.ItemView.SetBackgroundColor(((Email)mEmails[position]).IsSelected() ? Color.LightBlue : Color.Transparent);
myHolder.ItemView.Tag = position;
myHolder.ItemView.SetOnClickListener(this);
}
void View.IOnClickListener.OnClick(View v)
{
int position = (int)v.Tag;
listPosition = (int)v.Tag;
((Email)mEmails[position]).setSelected(!((Email)mEmails[position]).IsSelected());
v.SetBackgroundColor(((Email)mEmails[position]).IsSelected() ? Color.LightBlue : Color.Transparent);
if (mcollectID == null)
mcollectID = new List<collectPosition>();
if (((Email)mEmails[position]).IsSelected())
{
mcollectID.Add(new collectPosition() { getPosition = (int)v.Tag });
position_collectID = position_collectID + 1;
}
else
{
position_collectID = position_collectID - 1;
mcollectID.RemoveAt(position_collectID);
}
Toast.MakeText(v.Context, "Click : " + ((Email)mEmails[position]).date + "---" + position, ToastLength.Short).Show();
}
public void DeleteItem()
{
if (mEmails != null && mEmails.Count > 0)
{
foreach (collectPosition collId in mcollectID)
{
mEmails.RemoveAt(collId.getPosition);
NotifyItemChanged(collId.getPosition);
NotifyDataSetChanged();
}
}
}
}
我在哪里调用 recyclerview:
public class MainActivity : AppCompatActivity
{
public static RecyclerView mRecyclerView;
public static RecyclerView.LayoutManager mLayoutManager;
public RecyclerView.ViewHolder holder;
public static BottomNavigationView bottomnavigationview1;
public RecyclerAdapter mAdapter;
public static List<Email> mEmails;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Xamarin.Essentials.Platform.Init(this, bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
mRecyclerView = FindViewById<RecyclerView>(Resource.Id.recyclerViwer);
mRecyclerView.AddItemDecoration(new DividerItemDecoration(mRecyclerView.Context, DividerItemDecoration.Vertical));
mRecyclerView.HasFixedSize = true;
SetupList();
//Create our layout Manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.SetLayoutManager(mLayoutManager);
mAdapter = new RecyclerAdapter(mEmails, this);
mRecyclerView.SetAdapter(mAdapter);
bottomnavigationview1 = FindViewById<BottomNavigationView>
(Resource.Id.bottom_navigation);
bottomnavigationview1.NavigationItemSelected += BottomNavigation_NavigationItemSelected;
}
private void SetupList()
{
mEmails = new List<Email>();
mEmails.Add(new Email() { date = "9/25/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/25/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/25/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/24/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/24/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
}
【问题讨论】:
标签: c# xamarin.android