【问题标题】:Check box inside a ListView, setChecked(true) is not working in NougatListView 中的复选框,setChecked(true) 在 Nougat 中不起作用
【发布时间】:2017-06-09 10:54:38
【问题描述】:

我每个项目都有ListViewtext viewcheck box

单击每个项目时,我将复选框状态更改为真/假以在列表中显示所选项目。

 listSpinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 @Override
 public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    Helper.hideKeyBoard(getApplicationContext(), view);
    checkBox = (CheckBox) view.findViewById(R.id.chkbox_value);
    if (checkBox.isChecked()) {
       checkBox.setChecked(false);
       }
    else{
       checkBox.setChecked(true);                           
     }
     }

    });

我也尝试过使用 runaable:

 checkBox.post(new Runnable() {
                            @Override
                            public void run() {
                                checkBox.setChecked(true);
                            }
                        });

它在棉花糖上正常工作,但在牛轧糖上不工作!

注意:当我点击第二个项目时,第一个项目的勾号显示在牛轧糖中。

【问题讨论】:

  • 你想达到什么目的?
  • @gprathour 我想我在问题中解释了,当我点击列表视图中的项目时,项目复选框应该被勾选。当我在棉花糖中运行时,复选框被勾选,但在牛轧糖中没有!我清楚了吗
  • 我没有得到这个东西,if(checkBox.isChecked) then checkBox.setChecked(false);
  • @gprathour 当使用checkBox显示我们使用isChecked的状态时,它会返回checkBox是否被选中,点击时如果它已经被选中,我们取消选中它。
  • 您是否在适配器中维护复选框状态,如果不是,您必须使用数据集变量维护它以区分检查或不显示适配器代码我认为问题在于视图的回收

标签: android listview checkbox


【解决方案1】:

为了显示所选项目列表,您需要维护复选框状态

【讨论】:

    【解决方案2】:

    如果您仍然面临这个问题,我已经找到了解决方案:

    替换下面的代码:

    checkBox.post(new Runnable() {
                                @Override
                                public void run() {
                                    checkBox.setChecked(true);
                                }
                            });
    

    查看我的代码并查看它是否有效:

    checkBox.post(new Runnable() {
                                @Override
                                public void run() {
                                    checkBox.setChecked(true);
                                    checkBox.jumpDrawablesToCurrentState();
                                }
                            });
    

    【讨论】:

      【解决方案3】:

      你的代码流程是这样的:

      您正在单击一个复选框 -> 它检测到它被单击并检查自身 -> 您正在检查它是否被选中 -> 如果它被选中,那么您正在使用 setChecked(false) 取消选中您的复选框。

      删除以下代码,它应该可以工作:

      if (checkBox.isChecked()) {
             checkBox.setChecked(false);
             }
          else{
             checkBox.setChecked(true);                           
           }
      

      【讨论】:

        【解决方案4】:

        使用此侦听器检查复选框是否被选中并相应地执行操作。

        checkBox setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        
                   @Override
                   public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
        
                   }
               }
            );  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-10
          • 2012-04-15
          • 2016-11-10
          • 1970-01-01
          • 1970-01-01
          • 2019-10-09
          • 2018-05-04
          相关资源
          最近更新 更多