如何在动态视图中 select 只有一个复选框

How can I select only one Checkbox in a dynamic view

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

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

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);

    }

复选框的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"/> 

首先,在class中声明一个ArrayList

ArrayList<CheckBox> mCheckBoxes = new ArrayList<CheckBox>();

然后在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;
            }           
        }

    });