c# - 如何实现多选?检查 "All file"以从适配器中选择所有文件

标签 c# android xamarin xamarin.android

在复选框中选中“选择所有文件”,以选中适配器中的所有复选框。

public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var item = items[position];
        View view = convertView;

        view = context.LayoutInflater.Inflate(Resource.Layout.StockTakeUploadAdapter, null);
        view.DuplicateParentStateEnabled = true;
        createdview.Add(view);

        CheckBox chkBoxFileName = view.FindViewById<CheckBox>(Resource.Id.chkBoxFileName);
        chkBoxFileName.Tag = position;
        chkBoxFileName.SetOnCheckedChangeListener(this);

        view.FindViewById<TextView>(Resource.Id.lblFileName).Text = item.ST_filename.ToString();
        view.FindViewById<TextView>(Resource.Id.lblFileStatus).Text = item.ST_UploadStatus.ToString();


        if (!view.HasOnClickListeners)
            view.Click += View_LongClick;
        view.RefreshDrawableState();
        return view;
    }

当点击复选框“全选”时,适配器可以选择适配器中的所有记录。 enter image description here

最佳答案

你可以这样做, 在你的 Activity 中:

   CheckBox selectAll = FindViewById<CheckBox>(Resource.Id.button1);
   selectAll.SetOnCheckedChangeListener(this);


   public void OnCheckedChanged(CompoundButton buttonView, bool isChecked)
     {
        adapter.SelectAll(isChecked);
     }

在你的适配器中,使用一个集合来保存状态:

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

  public MyAdapter(int[] value)//in your constructor, it will be instantiated
        {
            item = value;
            for (int i = 0; i < item.Length; i++)
            {                
                checkBoxStatus.Add(i,false);
            }
        }

   public void SelectAll(bool isChecked)
        {
          for (int i = 0; i < item.Length; i++)
            {
                checkBoxStatus[i]= isChecked;
            }
          NotifyDataSetChanged();
        }
  public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = items[position];
            View view = convertView;

            view = context.LayoutInflater.Inflate(Resource.Layout.StockTakeUploadAdapter, null);
            view.DuplicateParentStateEnabled = true;
            createdview.Add(view);

            CheckBox chkBoxFileName = view.FindViewById<CheckBox>(Resource.Id.chkBoxFileName);
            chkBoxFileName .Checked = checkBoxStatus[position];
            chkBoxFileName.Tag = position;
            chkBoxFileName.SetOnCheckedChangeListener(this);

            view.FindViewById<TextView>(Resource.Id.lblFileName).Text = item.ST_filename.ToString();
            view.FindViewById<TextView>(Resource.Id.lblFileStatus).Text = item.ST_UploadStatus.ToString();


            if (!view.HasOnClickListeners)
               view.Click += View_LongClick;
               view.RefreshDrawableState();
            return view;
        }

  public void OnCheckedChanged(CompoundButton buttonView, bool isChecked)
        {
            checkBoxStatus[(int) buttonView.Tag]= isChecked;
            NotifyDataSetChanged();

        }

关于c# - 如何实现多选?检查 "All file"以从适配器中选择所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54302018/

相关文章:

c# - 在 xamarin 中发现同一依赖程序集的不同版本之间存在冲突

c# - 如何在单击按钮时发送远程通知? Xamarin.Android C#

c# - C# 中是否有像 C++ 这样的指针?安全吗?

c# - 如何使用 C# 读取和写入结构到文件?

c# - 从打开的 xml Word 文档主要部分中检索特定的表格元素

android - 使用android应用程序在树莓派上调用一个函数?

Java libgdx android - 我自己的资源文件未加载

c# - Entity Framework 代码优先映射

iphone - 是否有同时适用于 iphone 和 android 应用程序的图表库?

c# - Xamarin "Attempting to JIT compile method "