Как сохранить состояние CheckBox в listView?

В представлении списка моего приложения у меня есть флажок в каждом элементе списка. Я использую этот код для него в пользовательском BaseAdapter -

public class QuestionAdapter extends BaseAdapter {

 private Context context;
 private ArrayList<QuestionItem> questionItems;
 public QuestionAdapter(Context context, ArrayList<QuestionItem> questionItems){
        this.context = context;
        this.questionItems = questionItems;
 }

        @Override
public View getView(int position, View convertView, ViewGroup parent) {

    MySQLiteHelper sqliteHelper = new MySQLiteHelper(context); 
    QuestionViewHolder holder = null;

     OnCheckedChangeListener mStarCheckedChanceChangeListener = new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                final String id = (String) buttonView.getTag();
                Log.v(TAG, "isChecked is " + isChecked);
                Log.v(TAG,"id is " + id);

            }
        };

    if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater)
                    context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.question_list_item, null);

            holder = new QuestionViewHolder();

            holder.qid = (TextView) convertView.findViewById(R.id.qid);
            holder.title = (TextView) convertView.findViewById(R.id.title);

            holder.star = (CheckBox) convertView.findViewById(R.id.btn_star);

            convertView.setTag(holder);

    }
    else{
        holder = (QuestionViewHolder) convertView.getTag();
    }





        holder.qid.setText(questionItems.get(position).getQid());        
        holder.title.setText(questionItems.get(position).getTitle());


        holder.star.setTag(questionItems.get(position).getQid());
        if(sqliteHelper.questionexists(questionItems.get(position).getQid())){
            holder.star.setOnCheckedChangeListener(null);
            holder.star.setChecked(true);
            holder.star.setOnCheckedChangeListener(mStarCheckedChanceChangeListener);
        }
        else{
            holder.star.setOnCheckedChangeListener(null);
            holder.star.setChecked(false);
            holder.star.setOnCheckedChangeListener(mStarCheckedChanceChangeListener);
        }
        //star.setChecked(false);


        return convertView;
}

OnCheckedChangeListener от Star CheckBox работает нормально, если я вручную выбираю и отменяю его выбор. Однако, если я выбираю его и прокручиваю список вниз, а затем снова прокручиваю вверх, состояние checkBox меняется с выбранного на невыбранное.

Как сохранить состояние флажка? Пожалуйста, укажите мне, если я упустил что-то очень тривиальное или очень важное.


person akg    schedule 11.11.2014    source источник
comment
только одно решение. добавьте заголовок адаптера, и я предоставлю вам решение.   -  person hasan    schedule 11.11.2014
comment
@ hasan83 - заголовок адаптера ??   -  person akg    schedule 11.11.2014
comment
@hasan83 - добавил. Ты этого хотел?   -  person akg    schedule 11.11.2014


Ответы (2)


Надеюсь, что эта следующая ссылка поможет вам.

http://lalit3686.blogspot.in/2012/06/today-i-am-going-to-show-how-to-deal.html

person No Name    schedule 11.11.2014
comment
Пишет, что блог не существует. - person akg; 11.11.2014

в каждом элементе вашего списка вы должны содержать значение «isChecked», а в вашем методе getView вы должны вызвать владельца.checkBox.setChecked(item.isChecked); , и вы должны удалить реализацию OnCheckedListener и вместо этого реализовать OnClickListener и «играть» с вашим значением item.isChecked. (вы должны удалить реализацию OnCheckedListener, потому что каждый раз, когда вы выполняете holder.checkBox.setChecked(item.isChecked) метод onCheckChanged invoke)

person Liran Peretz    schedule 11.11.2014