【问题标题】:CheckBoxes in android安卓中的复选框
【发布时间】:2011-12-04 10:34:18
【问题描述】:

嗨,当我滚动列表项时,我在 android 中使用带有 listview 的复选框,我没有得到相同的复选框,检查了预期的内容,请帮助我找出我错的地方。当我选择第一个复选框并滚动它给我第二个复选框时,其他输出也很奇怪。这是我的代码

class base extends BaseAdapter{

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return price.size();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

        @Override
        public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub
            View v=arg1;
j=arg0;
            LayoutInflater li=getLayoutInflater();
            v=li.inflate(R.layout.listitem, null);
            TextView txt=(TextView)v.findViewById(R.id.tv_name);
            txt.setText(author.get(arg0));
            TextView txt1=(TextView)v.findViewById(R.id.tv_description);
            txt1.setText(price.get(arg0));
            TextView txt2=(TextView)v.findViewById(R.id.txtv);
        txt2.setText(title.get(arg0));
        ImageView img=(ImageView)v.findViewById(R.id.iv_forward);


        img.setImageBitmap(bit.get(arg0));
        CheckBox check1=(CheckBox)v.findViewById(R.id.check);
        if(check[j]!=null)
            if(check[j]==true)
            check1.setChecked(true);
            else check1.setChecked(false);

        check1.setOnCheckedChangeListener(new OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(CompoundButton arg0, boolean arg2) {
                // TODO Auto-generated method stub
                if(arg2==true)
                //  Toast.makeText(SimpleActivity.this,arg0+"", Toast.LENGTH_LONG).show();
                check[j]= true;
                else 
                    check[j]=false;
            }

        });

            return v;


    }
        }

请帮忙。

【问题讨论】:

标签: android android-layout android-widget


【解决方案1】:

由于您每次都在回收视图,因此该复选框将具有与列表视图的前一个视图相同的值。我要做的是为每次迭代将复选框设置为 false FIRST,然后确定是否应该检查它:

check1.setChecked(false);
if(check[j]!=null && check[j]==true){
        check1.setChecked(true);
}

【讨论】:

    【解决方案2】:

    我认为这可能是因为适配器getView() 方法正在调用onCheckedChanged()(仅当重用视图具有相反的值时)。这会导致奇怪的行为。

    public View getView(int arg0, View arg1, ViewGroup arg2) {
      if(check[j]==true) check1.setChecked(true); // will automatically call onCheckedChanged 
      else check1.setChecked(false);              // if check1 was previously the opposite
    
    }
    

    您或许应该在更改值之前取消 checkListener:

    public View getView(int arg0, View arg1, ViewGroup arg2) {
    
      check1.setOnCheckedChangeListener(null); // first remove listener
    
      //update values
      if(check[j]==true) check1.setChecked(true); //no more side effect
      else check1.setChecked(false);
    
      //reinstall listener
      check1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
         //your code.
      }
    }
    

    【讨论】:

      【解决方案3】:

      我在使用 CheckBox 的 ListView 时遇到了类似的问题。Here 你可以找到一个完整的解决方案来解决这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-01
        相关资源
        最近更新 更多