簡體   English   中英

如何選中單選按鈕以及如何僅控制在列表視圖中選擇的一個單選按鈕

[英]How to get checked radio button and how to control only one radio button selected in list view

我試圖將我的數據添加到列表視圖中。 我正在使用適配器。 在列表視圖中有單選按鈕和一些字段。

class StocktakeEditViewAdaptor : BaseAdapter<Model.FileRecord>
{
private Dictionary<int, bool> checkDictionary = new Dictionary<int, bool>();



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

        //if (view == null)
        {
            view = context.LayoutInflater.Inflate(Resource.Layout.StockTakeEditDetailList, null);
            view.DuplicateParentStateEnabled = true;


            createdview.Add(view);
            RadioButton lblradio = view.FindViewById<RadioButton>(Resource.Id.lblradio);
            lblradio.Tag = item.FileRecord_ID + ":" + item.ST_filename + ":" + item.ST_BinLoc;
lblradio.Checked = checkDictionary[position];   //add position here
            lblradio.SetOnCheckedChangeListener(null);
            lblradio.SetOnCheckedChangeListener(new CheckedChangeListener(this.context));

            view.FindViewById<TextView>(Resource.Id.txtLineNo).Text = item.FileRecord_ID.ToString();  //my field in adapter.
            view.FindViewById<TextView>(Resource.Id.txtbinloc).Text = item.ST_BinLoc.ToString();
            view.FindViewById<TextView>(Resource.Id.txtBarcodett).Text = item.ST_Barcode.ToString();
            view.FindViewById<TextView>(Resource.Id.txtQtytt).Text = item.ST_Qty.ToString();


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

        public void OnCheckedChanged(CompoundButton buttonView, bool isChecked)
        {
            for (int i = 0; i < checkDictionary.Count(); i++)
            {
                if (i == (int)buttonView.Tag)
                {
                    checkDictionary[i] = true;   //error on here
                }
                else
                {
                    checkDictionary[i] = false;  //error on here
                }
            }

        }

我可以在列表視圖中顯示我的記錄。但是單選按鈕可以選擇多個。 我不想選擇多條記錄。

您可以創建一個集合來存儲單選按鈕的檢查狀態,然后在getView加載該集合時加載該集合。 像這樣 :

class YourAdapter : BaseAdapter,CompoundButton.IOnCheckedChangeListener
    {
        private Dictionary<int, bool> checkDictionary = new Dictionary<int, bool>();
        int[] item;  //raplace your own data
        public MyAdapter(int[] value) //raplace your own data
        {
            item = value;
            for (int i = 0; i < item.Length; i++)
            {
                checkDictionary.Add(i,false);
            }
        }



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

    //if (view == null)
      {
        view = context.LayoutInflater.Inflate(Resource.Layout.StockTakeEditDetailList, null);
        view.DuplicateParentStateEnabled = true;


        createdview.Add(view);
        RadioButton lblradio = view.FindViewById<RadioButton>(Resource.Id.lblradio);

        lblradio.Tag = position;
        lblradio.Checked = checkDictionary[position];
        lblradio.SetOnCheckedChangeListener(this);

        view.FindViewById<TextView>(Resource.Id.txtLineNo).Text = item.FileRecord_ID.ToString();  //my field in adapter.
        view.FindViewById<TextView>(Resource.Id.txtbinloc).Text = item.ST_BinLoc.ToString();
        view.FindViewById<TextView>(Resource.Id.txtBarcodett).Text = item.ST_Barcode.ToString();
        view.FindViewById<TextView>(Resource.Id.txtQtytt).Text = item.ST_Qty.ToString();


        if (!view.HasOnClickListeners)
            view.Click += View_LongClick;
        view.RefreshDrawableState();
      }
        return view;
    }
public void OnCheckedChanged(CompoundButton buttonView, bool isChecked)
    {
        for (int i = 0; i < checkDictionary.Count; i++)
         {
           if (i == (int) buttonView.Tag)
            {
                checkDictionary[i] = true;
            }
           else
            {
                checkDictionary[i] = false;
            }
         }
            NotifyDataSetChanged();

      }
   }

您可以選擇多個單選按鈕的原因是它們不屬於同一個單選按鈕組。

引用自 Android Radiobutton的官方文檔。

要創建每個單選按鈕選項,請在您的布局中創建一個 RadioButton。 但是,因為單選按鈕是互斥的,所以您必須將它們組合到 RadioGroup 中。 通過將它們組合在一起,系統確保一次只能選擇一個單選按鈕。

這該怎么做?

RadioGroup 就像 Radiobuttons 的一個視圖組,因此您可以像使用它一樣使用它

XML:

<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/radio_pirates"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/pirates"
    android:onClick="onRadioButtonClicked"/>
<RadioButton android:id="@+id/radio_ninjas"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/ninjas"
    android:onClick="onRadioButtonClicked"/>
</RadioGroup>

C#:

RadioGroup rg = new RadioGroup(this); //create the RadioGroup
rg.Orientation = Orientation.Horizontal;//or Orientation.VERTICAL
RadioButton rb = new RadioButton(this);// create the radiobutton
rg.AddView(rb);// add to radio group 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM