亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

C#
蠱毒傳說 2022-07-23 17:24:44
我試圖將我的數據添加到列表視圖。我正在使用適配器。列表視圖內部有單選按鈕和一些字段。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                }            }        }我可以在列表視圖中顯示我的記錄。但是單選按鈕可以選擇多個。我不想選擇多條記錄。
查看完整描述

2 回答

?
當年話下

TA貢獻1890條經驗 獲得超9個贊

您可以創建一個集合來存儲單選按鈕的檢查狀態,然后在加載集合時加載該集合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();


      }

   }


查看完整回答
反對 回復 2022-07-23
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

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


引用自 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 


查看完整回答
反對 回復 2022-07-23
  • 2 回答
  • 0 關注
  • 134 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號