如何在动态视图中仅选择一个复选框

S.P*_*.P. 1 checkbox android checkboxlist

我有一个动态添加两行textView和一个CheckBox的行的屏幕.我的问题是我只希望用户可以检查一个,其他人必须取消选中.如果用户按下另一个复选框,请启用此选项并禁用所有其他复选框.我测试了一些东西,但我没有得到我想要的功能.

我无法将配置从复选框更改为radioButton,我必须使用我正在使用的方法:

private selected_position = -1;

protected void addGreetingToListView(final GreetingListJson greetings) {
        View row = inflater.inflate(R.layout.main_greetings_settings_row, greetingListView, false);
        row.setTag(greetings);

        playButton = (ToggleButton) row.findViewById(R.id.detail_play_greeting);            
        TextView greetingName = (TextView)row.findViewById(R.id.greetingTitle);
        greetingName.setDuplicateParentStateEnabled(true);
        TextView greetingDescription = (TextView)row.findViewById(R.id.greetingDescription);
        greetingDescription.setDuplicateParentStateEnabled(true);

        checkBox = (CheckBox) row.findViewById(R.id.checkBox_greeting_list);
        checkBox.setTag(greetings);


        checkBox.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick (View view) {

                if (((CheckBox) view).isChecked())
                {
                    selected_position= greetingListView.getChildCount();
                }
                else
                {
                    selected_position=-1;
                }           
            }

        });


                greetingName.setText(greetings.Name);
                greetingDescription.setText(greetings.Description);


            row.setOnClickListener(this);
            row.setOnLongClickListener(this);
            row.setFocusable(true);


            greetingListView.addView(row);

    }
Run Code Online (Sandbox Code Playgroud)

Checkbox的XML:

   <CheckBox
         android:id="@+id/checkBox_greeting_list"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         android:layout_marginRight="15dp"
         android:layout_centerVertical="true"/> 
Run Code Online (Sandbox Code Playgroud)

shh*_*hhp 5

首先,宣布一个 ArrayList在课堂上:

ArrayList<CheckBox> mCheckBoxes = new ArrayList<CheckBox>();
Run Code Online (Sandbox Code Playgroud)

然后addGreetingToListView将每个新复选框添加到mCheckBoxes并修改的单击侦听器:

checkBox.setTag(greetings);

mCheckBoxes.add(checkBox);
checkBox.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick (View view) {

            if (((CheckBox) view).isChecked())
            {
                for (int i = 0; i < mCheckBoxes.size(); i++) {
                     if (mCheckBoxes.get(i) == view)
                         selected_position = i;
                     else 
                         mCheckBoxes.get(i).setChecked(false);
                }

            }
            else
            {
                selected_position=-1;
            }           
        }

    });
Run Code Online (Sandbox Code Playgroud)