【问题标题】:How can I select only one Checkbox in a dynamic view如何在动态视图中只选择一个复选框
【发布时间】:2015-08-21 08:44:30
【问题描述】:

我有一个动态添加一行的屏幕,其中包含两个 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"/> 

【问题讨论】:

  • 也许使用单选按钮?
  • 可以生成多少动态行(粗略的数字)...?
  • 我不能使用单选按钮,无限行。
  • 如果无限行那么你应该去 listView。
  • 我不能使用listView,因为布局还有其他元素,而且所有屏幕都有滚动视图。

标签: android checkbox checkboxlist


【解决方案1】:

首先,在类中声明一个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;
            }           
        }

    });

【讨论】:

  • 使用此代码我现在无法选择任何行,您单击复选框但不启用...只有最后一行我可以检查
  • 我没有收到“您单击复选框但未启用”。什么意思?
  • 我的意思是当我按下复选框时,不会显示勾选启用。例如,目前,我有六个复选框,使用此代码,前五个我永远无法选择它,只有最后一个是可能的
  • 你能张贴一些图片来详细说明你想要什么吗?
  • 对不起,stackoverflow 不允许我发布图片...想象一下带有他的复选框的一些行。当我按下一个时,复选框没有启用,总是没有启用,有意义吗?
猜你喜欢
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 2013-10-21
相关资源
最近更新 更多