在我的应用程序列表视图中,我在每个listItem中都有一个复选框。我在自定义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;
}
Star CheckBox的onCheckedChangeListener在手动选择和取消选择时工作正常。但是如果我选择它并向下滚动列表视图然后再向上滚动,则checkBox的状态从选中变为未选中。
如何保留复选框的状态?如果我遗漏了一些非常重要或非常重要的内容,请指出我。
答案 0 :(得分:0)
答案 1 :(得分:0)
在列表的每个项目中,您应该保留“isChecked”值,并且在您的getView方法中,您应该调用holder。checkBox.setChecked(item.isChecked);
,并且您必须删除OnCheckedListener
的实现,而是实现{ {1}}并使用OnClickListener
值“播放”。 (您应该删除OnCheckedListener的实现,因为每次item.isChecked
方法holder.checkBox.setChecked(item.isChecked)
)