如何更改列表视图中复选框的文本? [英] How to change the text of a CheckBox in listview?

查看:23
本文介绍了如何更改列表视图中复选框的文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这是一个愚蠢的问题,但我无法完成.我想在点击时更改 ChekcBox 的文本.它会根据需要更改,但奇怪的是当我滚动列表视图时,该文本被分配给列表视图中存在的其他一些复选框.似乎每次我们滚动时都会重新加载 Listview.以下是我迄今为止尝试过的.

I know its a silly question but I am not able to get it done. I want to change the text of a ChekcBox when clicked.Its changing as required but the weird thing is when I scroll the listview, that text is assigned to some other checkbox present in the listview.Seems like Listview is reloading each time we scroll.Below is what I have tried so far.

public View getView(int position, View convertView, ViewGroup parent) {  
              ViewHolder holder;  
              if (convertView == null) {  
                   holder = new ViewHolder();  
                   convertView = LayoutInflater.from(mContext).inflate(  
                             R.layout.row_photo, null);  
                   holder.textview = (TextView) convertView  
                             .findViewById(R.id.thumbImage);  
                   holder.checkbox = (CheckBox) convertView  
                             .findViewById(R.id.itemCheckBox);  
                   convertView.setTag(holder);  
              } else {  
                   holder = (ViewHolder) convertView.getTag();  
              }  
              holder.checkbox.setId(position);  
              holder.textview.setId(position);  
              holder.checkbox.setOnClickListener(new OnClickListener() {  
                   public void onClick(View v) {  
                        // TODO Auto-generated method stub  
                         cb = (CheckBox) v;  
                        id = cb.getId();  
                       cb.setText("Hiii");
                   }  

              });  

              holder.textview.setText(items.get(position));  

              holder.id = position;  
              return convertView;  
         }  

请指导我完成这个.

推荐答案

您的自定义适配器必须实现 CompoundButton.OnCheckedChangeListener

Your Custom Adapter must implement CompoundButton.OnCheckedChangeListener

然后

     cb.setChecked(mCheckStates.get(position, false)); 
     cb.setOnCheckedChangeListener(this);

然后使用选中状态将文本设置为复选框

Then use the checked state to set text to check box

      public boolean isChecked(int position) {
        return mCheckStates.get(position, false);
    }

    public void setChecked(int position, boolean isChecked) {
        mCheckStates.put(position, isChecked);

    }

    public void toggle(int position) {
        setChecked(position, !isChecked(position));
    }
@Override
public void onCheckedChanged(CompoundButton buttonView,
        boolean isChecked) {
    // TODO Auto-generated method stub
    if(isChecked)
    {
    buttonView.setText("Hello");
    }
    else
    {
        buttonView.setText("");
    }
     mCheckStates.put((Integer) buttonView.getTag(), isChecked);    

}

示例

public class MainActivity extends Activity implements
AdapterView.OnItemClickListener {
    int count;
private CheckBoxAdapter mCheckBoxAdapter;

String[] GENRES = new String[] {
    "Action", "Adventure", "Animation", "Children", "Comedy",
"Documentary", "Drama",
    "Foreign", "History", "Independent", "Romance", "Sci-Fi",
"Television", "Thriller"
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ListView listView = (ListView) findViewById(R.id.lv);

    listView.setItemsCanFocus(false);
    listView.setTextFilterEnabled(true);
    listView.setOnItemClickListener(this);
    mCheckBoxAdapter = new CheckBoxAdapter(this, GENRES);
           listView.setAdapter(mCheckBoxAdapter);
    Button b= (Button) findViewById(R.id.button1);
    b.setOnClickListener(new OnClickListener()
    {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            StringBuilder result = new StringBuilder();
            for(int i=0;i<GENRES.length;i++)
            {
                if(mCheckBoxAdapter.mCheckStates.get(i)==true)
                {
                    result.append(GENRES[i]);
                    result.append("
");
                }

            }
            Toast.makeText(MainActivity.this, result, 1000).show();
        }

    });




   }

public void onItemClick(AdapterView parent, View view, int
position, long id) {
    mCheckBoxAdapter.toggle(position);
}

class CheckBoxAdapter extends ArrayAdapter implements CompoundButton.OnCheckedChangeListener
{  private SparseBooleanArray mCheckStates;
   LayoutInflater mInflater;
    TextView tv1,tv;
    CheckBox cb;
    String[] gen;
    CheckBoxAdapter(MainActivity context, String[] genres)
    {
        super(context,0,genres);
        mCheckStates = new SparseBooleanArray(genres.length);
        mInflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        gen= genres;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return gen.length;
    }

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

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub

        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View vi=convertView;
        if(convertView==null)
         vi = mInflater.inflate(R.layout.checkbox, null); 
         tv= (TextView) vi.findViewById(R.id.textView1);

         cb = (CheckBox) vi.findViewById(R.id.checkBox1);
         tv.setText("Name :"+ gen [position]);
         cb.setTag(position);
         cb.setChecked(mCheckStates.get(position, false));
        cb.setOnCheckedChangeListener(this);
        return vi;
    }
     public boolean isChecked(int position) {
            return mCheckStates.get(position, false);
        }

        public void setChecked(int position, boolean isChecked) {
            mCheckStates.put(position, isChecked);

        }

        public void toggle(int position) {
            setChecked(position, !isChecked(position));
        }
    @Override
    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        // TODO Auto-generated method stub
        if(isChecked)
        {
        buttonView.setText("Hello");
        }
        else
        {
            buttonView.setText("");
        }
         mCheckStates.put((Integer) buttonView.getTag(), isChecked);    

    }

}

}

快照.当您选中复选框时,它会设置为文本,当您取消选中将文本设置为"

Snap Shot. When you check the checkbox it set's the text when you uncheck set the text to ""

这篇关于如何更改列表视图中复选框的文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆