Xamarin Android C#可过滤/带有recyclerview和复选框的searchview

时间:2019-11-07 03:23:04

标签: c# checkbox android-recyclerview xamarin.android searchview

我已创建,带有搜索视图的应用程序带有带有复选框的RecyclerView。当我选中一个复选框时,搜索选中的复选框将变为取消选中状态。我该如何解决该问题?搜索状态下的复选框状态复选框仍处于选中状态。谢谢其他程序员

截屏1: Application View

在回收站视图中检查项目时: Selecting Item Checkbox

当我搜索该项目时,其复选框状态更改为未选中的项目:Searching the item becomes unchecked

HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();

.onSubmit(new MultiSelectDialog.SubmitCallbackListener() {
@Override
public void onSelected(ArrayList<Integer> selectedIds, ArrayList<String> selectedNames, String dataString) {
    //Adding tags
    mTagContainerLayout2.addTag(selectedNames());

    for (int i = 0; i < selectedIds.size(); i++) {
        hashMap.add(selectedIds.get(i), i);
    }
}

1 个答案:

答案 0 :(得分:0)

使用单独的数据集(Dictionary<int, bool> map)存储位置时,需要分别处理Item数据和位置。

private Dictionary<int, bool> map = new Dictionary<int, bool>();

尝试另一种方法,只需在对象模型中添加一个字段:Info_LoadBranch。例如:

 public bool isChecked {  get; set; }

并将变量初始化为false

然后,当您选中(或取消选中)复选框时,您可以参考以下代码:

public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {
        PhotoViewHolder vh = holder as PhotoViewHolder;
        //***********************
        Photo item =   mPhotoAlbum[position];

        //***********************
        //vh.MyCheckBox.Tag = position;

        vh.Caption.Text = item.Caption;

        vh.MyCheckBox.SetOnCheckedChangeListener(null);
        vh.MyCheckBox.SetOnCheckedChangeListener(new MyListener(item));
        vh.MyCheckBox.Checked = item.isChecked;

    }

还有MyListener

class MyListener : Java.Lang.Object, CompoundButton.IOnCheckedChangeListener
    {
        Photo photo;

        public MyListener( Photo item)
        {
            this.photo = item;
        }

        public void OnCheckedChanged(CompoundButton buttonView, bool isChecked)
        {
            photo.isChecked = isChecked;
        }
    }

如果要查找选中的项目,则可以像这样进行过滤:

            List<Photo> checkedList = new List<Photo>();

            for (int i=0;i< loadBranch.Count;i++) {
                Photo temp = loadBranch[i];                 

                if (temp.isChecked) {
                    checkedList.Add(temp);
                }
            }

注意:模型Photo是我的模型,您只需使用您的模型即可。