¿Cómo cambiar el texto de un CheckBox en la vista de lista?

Sé que es una pregunta tonta, pero no puedo hacerlo. Quiero cambiar el texto de un ChekcBox cuando hace clic. Cambia según sea necesario, pero lo extraño es que cuando desplazo la vista de lista, ese texto se asigna a alguna otra casilla presente en la vista de lista. Parece que Listview se recarga cada vez que nos desplazamos. Debajo está lo que he intentado hasta ahora.

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

Por favor, guíame a través de esto.

Su adaptador personalizado debe implementar CompoundButton.OnCheckedChangeListener

Entonces

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

A continuación, use el estado marcado para establecer el texto en la checkbox

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

Ejemplo

 public class MainActivity extends Activity implements AdapterView.OnItemClickListener { int count; private CheckBoxAdapter mCheckBoxAdapter; String[] GENRES = new String[] { "Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Dtwig", "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 

Snap Shot. Cuando marque la checkbox, configurará el texto cuando desmarque establecer el texto en ""

enter image description here

Veo que ha implementado listView como debería implementarse – viewholder + convert view. En este momento todo lo que tienes que hacer es llamar

 holder.checkbox.setText("Hello World!"); 

Todo lo que tienes que hacer para resolver tu problema es cambiar el texto de cada checkbox debido a algunas condiciones. Entonces, si está marcado, configure el texto “+” else “-“. Cámbielo como lo desee, pero debe cambiar cada texto de checkbox.