Переключить флажок программно

У меня есть ListView элементов, которые необходимо проверить / непроверять. Я настроил ArrayAdapter, который в настоящее время использует android.R.layout.simple_list_item_multiple_choice как строку, и все отображает просто отлично. Я также могу правильно получить клики по этому элементу. Однако флажок в пользовательском интерфейсе не переключается, когда элемент выбран. Я пытался понять это на какое-то время, может ли кто-нибудь указать мне в правильном направлении? Я просто хочу знать, как заставить пользовательский интерфейс обновляться, чтобы отразить измененное состояние флажка.

Я могу предоставить код, если это необходимо, но я пытаюсь найти что-то очень конкретное здесь, поэтому я считаю, что публикация кучи моего кода не принесет большой пользы.

Благодаря!

Прежде всего, рассмотрим мой ответ: Android listview с флажками?

Если вы хотите установить флажки с установленным флажком в ListView, вам просто нужно реализовать ниже строки в методе getView ():

// also check this lines in the above example ViewHolder holder = (ViewHolder) view.getTag(); holder.checkbox.setChecked(list.get(position).isSelected()); 

Также проверьте метод getView () для реализации события на CheckBox, находящемся внутри ListView:

 @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; if (convertView == null) { LayoutInflater inflator = context.getLayoutInflater(); view = inflator.inflate(R.layout.rowbuttonlayout, null); final ViewHolder viewHolder = new ViewHolder(); viewHolder.text = (TextView) view.findViewById(R.id.label); viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); viewHolder.checkbox .setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Model element = (Model) viewHolder.checkbox .getTag(); element.setSelected(buttonView.isChecked()); } }); view.setTag(viewHolder); viewHolder.checkbox.setTag(list.get(position)); } else { view = convertView; ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); } ViewHolder holder = (ViewHolder) view.getTag(); holder.text.setText(list.get(position).getName()); holder.checkbox.setChecked(list.get(position).isSelected()); // ...... } 

Программно в java-коде

 CheckBox mCheckBox = (CheckBox) findViewById(R.id.checkBox); mCheckBox.setChecked(true); //to check mCheckBox.setChecked(false); //to uncheck 

В андроиде XML

 android:checked="true" //to check android:checked="false" //to uncheck 

в виде

 <CheckBox android:id="@+id/checkBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="Checkbox Item" /> 

Вы пробовали следующее?

 @Override public void onListItemClick(ListView listView, View view, int position, long id) { //Invert the checkbox-status ((CheckedTextView) view.findViewById(R.id.text1)).setChecked(!isChecked()); return; } 

Вы можете использовать пользовательский базовый адаптер. Это позволит вам выбрать только один момент, но вы можете изменить это, отменив проверку, чтобы увидеть, какие из них выбраны.

 public class CheckBoxGridAdapter extends BaseAdapter{ LayoutInflater inflater; ArrayList<Holder> list; int res; Context context; public CheckBoxGridAdapter(Context context, ArrayList<Holder> list, int layoutResourceId) { inflater = LayoutInflater.from(context); this.context = context; this.list =list; this.res = layoutResourceId; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = inflater.inflate(res, parent, false); holder = new ViewHolder(); holder.tv1 = (TextView) convertView.findViewById(R.id.checkBoxTxt); holder.cb = (CheckBox) convertView.findViewById(R.id.checkBox); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Holder h = list.get(position); holder.tv1.setText(h.getCBName()); holder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { int pos = (Integer) buttonView.getTag(); checkChecks(pos); } CheckBoxGridAdapter.this.notifyDataSetChanged(); } }); holder.cb.setTag(position); holder.cb.setChecked(list.get(position).getSelectState()); return convertView; } protected void checkChecks(int pos) { for(int i = 0;i<list.size();i++) { Holder h = (Holder) list.get(i); if(i==pos) { Log.d( pos +" checked","is checked"); h.setSelectState(true); } else { Log.d( i +" checked","is not checked"); h.setSelectState(false); } } } static class ViewHolder { TextView tv1; CheckBox cb; RadioButton rb; } }