Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在listView中保留checkedBox的状态?_Android_Listview_Checkbox_Android Checkbox - Fatal编程技术网

Android 如何在listView中保留checkedBox的状态?

Android 如何在listView中保留checkedBox的状态?,android,listview,checkbox,android-checkbox,Android,Listview,Checkbox,Android Checkbox,在我的应用程序的列表视图中,我在每个listItem中都有一个复选框- public class QuestionAdapter extends BaseAdapter { private Context context; private ArrayList<QuestionItem> questionItems; public QuestionAdapter(Context context, ArrayList<QuestionItem> questionIte

在我的应用程序的列表视图中,我在每个listItem中都有一个复选框-

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;
}
公共类QuestionAdapter扩展了BaseAdapter{
私人语境;
私人ArrayList问题项;
公共QuestionAdapter(上下文上下文,ArrayList questionItems){
this.context=上下文;
this.questionItems=questionItems;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
MySQLiteHelper sqliteHelper=新的MySQLiteHelper(上下文);
QuestionViewHolder=null;
OnCheckedChangeListener mStarCheckedChanceChangeListener=新建OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
final String id=(String)buttonView.getTag();
Log.v(标签“isChecked is”+isChecked);
Log.v(标签,“id为”+id);
}
};
if(convertView==null){
LayoutInflater mInflater=(LayoutInflater)
context.getSystemService(Activity.LAYOUT\u INFLATER\u SERVICE);
convertView=mInflater.充气(R.layout.question\u list\u项,空);
holder=新问题ViewHolder();
holder.qid=(TextView)convertView.findViewById(R.id.qid);
holder.title=(TextView)convertView.findViewById(R.id.title);
holder.star=(复选框)convertView.findViewById(R.id.btn_star);
convertView.setTag(支架);
}
否则{
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.setOnCheckedChangeListener(mStarCheckedChanceChangeListener);
}
否则{
holder.star.setOnCheckedChangeListener(null);
支架。星形。设置检查(假);
holder.star.setOnCheckedChangeListener(mStarCheckedChanceChangeListener);
}
//star.setChecked(false);
返回视图;
}
如果我手动选择并取消选择星号复选框的onCheckedChangeListener,它可以正常工作。但是如果我选择它并向下滚动listview,然后再次向上滚动,复选框的状态将从选中变为未选中


如何保留复选框的状态?如果我遗漏了一些非常琐碎或非常重要的内容,请告诉我。

希望以下链接能够帮助您


在列表的每一项中,您都应该保留“isChecked”值,并且在getView方法中,您应该调用holder.
checkBox.setChecked(item.isChecked);
,并且您必须删除
OnCheckedListener
的实现,而是实现
OnClickListener
和“play”使用您的
item.isChecked
值。(您应该删除OnCheckedListener的实现,因为每次执行
holder.checkBox.setChecked(item.isChecked)
方法
oncheckedInvoke

只有一个解决方案。添加适配器标题,我将为您提供解决方案。@hasan83-适配器标题???@hasan83-已添加。这是您想要的吗?它说博客不存在。