Android:如何保存多个复选框状态,甚至关闭和重新打开应用程序

Android:如何保存多个复选框状态,甚至关闭和重新打开应用程序,android,Android,我正在使用带有复选框的自定义listview…每当我选择复选框项时,它都会被选中,没有任何问题…关闭并重新打开应用程序后,选中的复选框项显示为未选中状态…如何在重新打开应用程序后保存选中的复选框项…我知道使用共享首选项是可能的…以下是代码 public class SelectUserAdapter extends BaseAdapter { public List<SelectUser> _data; private ArrayList<SelectUser> arr

我正在使用带有复选框的自定义listview…每当我选择复选框项时,它都会被选中,没有任何问题…关闭并重新打开应用程序后,选中的复选框项显示为未选中状态…如何在重新打开应用程序后保存选中的复选框项…我知道使用共享首选项是可能的…以下是代码

public class SelectUserAdapter extends BaseAdapter {

public List<SelectUser> _data;
private ArrayList<SelectUser> arraylist;
Context _c;
ViewHolder v;
//RoundImage roundedImage;
List<String> list;

public String blockedlist;

public SelectUserAdapter(List<SelectUser> selectUsers, Context context) {
    _data = selectUsers;
    _c = context;
    this.arraylist = new ArrayList<SelectUser>();
    this.arraylist.addAll(_data);
}

@Override
public int getCount() {
    return _data.size();
}

@Override
public Object getItem(int i) {
    return _data.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}


@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
    View view = convertView;
    if (view == null) {
        LayoutInflater li = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = li.inflate(R.layout.contacts_diplay_row, null);
        Log.e("Inside", "here--------------------------- In view1");
    } else {
        view = convertView;
        Log.e("Inside", "here--------------------------- In view2");
    }

    v = new ViewHolder();

    v.title = (TextView) view.findViewById(R.id.name);
    v.check = (CheckBox) view.findViewById(R.id.check);
    v.phone = (TextView) view.findViewById(R.id.no);
    v.imageView = (ImageView) view.findViewById(R.id.pic);

    final SelectUser data = (SelectUser) _data.get(i);
    v.title.setText(data.getName());
   // v.check.setChecked(data.getCheckedBox());
    v.phone.setText(data.getPhone());

    final  SelectUser p = getProduct(i);
    v.check.setOnCheckedChangeListener(myCheckChangeList);
    v.check.setTag(i);
    v.check.setChecked(p.isSelected);

    // Set image if exists
    try {

        if (data.getThumb() != null) {
            v.imageView.setImageBitmap(data.getThumb());
        } else {
            v.imageView.setImageResource(R.drawable.ic_launcher);
        }
        // Seting round image
        Bitmap bm = BitmapFactory.decodeResource(view.getResources(), R.drawable.ic_launcher); // Load default image
        //roundedImage = new RoundImage(bm);
        //v.imageView.setImageDrawable(roundedImage);
    } catch (OutOfMemoryError e) {
        // Add default picture
        v.imageView.setImageDrawable(this._c.getDrawable(R.drawable.ic_launcher));
        e.printStackTrace();
    }

    Log.e("Image Thumb", "--------------" + data.getThumb());

    // Set check box listener android
    v.check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CheckBox checkBox = (CheckBox) view;
            if (checkBox.isChecked()) {
                data.setCheckedBox(true);

                Log.i("cdcd", "onItemClick: " +data.toString());
              } else {
                data.setCheckedBox(false);
            }
        }
    });

    view.setTag(data);
    return view;
}





    // Filter Class
public void filter(String charText) {
    charText = charText.toLowerCase(Locale.getDefault());
    _data.clear();
    if (charText.length() == 0) {
        _data.addAll(arraylist);
    } else {
        for (SelectUser wp : arraylist) {
            if (wp.getName().toLowerCase(Locale.getDefault())
                    .contains(charText)) {
                _data.add(wp);
            }
        }
    }
    notifyDataSetChanged();
}




  // for check box................
    SelectUser getProduct(int position) {
    return ((SelectUser) getItem(position));
}

ArrayList<SelectUser> getBox() {
    ArrayList<SelectUser> box = new ArrayList<SelectUser>();
    for (SelectUser p : arraylist) {
        if (p.isSelected)
            box.add(p);
    }
    return box;
}

CompoundButton.OnCheckedChangeListener myCheckChangeList = new CompoundButton.OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView,
                                 boolean isChecked) {



        getProduct((Integer) buttonView.getTag()).isSelected = isChecked;

        String result = "999";
        for (SelectUser pp : getBox()) {
            if (pp.isSelected){

                result += "," +pp.phone;// PhoneNumberUtils.formatNumber(pp.phone)
                list = new ArrayList<String>();
                list.add(result);

            }
        }
        blockedlist = String.valueOf(list);

        Toast.makeText(_c, String.valueOf(blockedlist), Toast.LENGTH_LONG).show();


    }
};

static class ViewHolder {
    ImageView imageView;
    TextView title, phone;
    CheckBox check;
}
public类SelectUserAdapter扩展BaseAdapter{
公共列表数据;
私有ArrayList ArrayList;
语境;
持票人v;
//圆形图像圆形图像;
名单;
公共字符串阻止列表;
公共SelectUserAdapter(列出selectUsers,上下文){
_数据=选择用户;
_c=上下文;
this.arraylist=新的arraylist();
this.arraylist.addAll(_data);
}
@凌驾
public int getCount(){
返回_data.size();
}
@凌驾
公共对象getItem(int i){
返回_data.get(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
@凌驾
公共视图getView(int i、视图转换视图、视图组视图组){
视图=转换视图;
如果(视图==null){
LayoutInflater li=(LayoutInflater)\u c.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
视图=li.充气(右布局触点排,空);
Log.e(“视图1中的“内部”、“此处--------------------”);
}否则{
视图=转换视图;
Log.e(“内部”,“此处-----------------在视图2中”);
}
v=新的视图保持架();
v、 title=(TextView)view.findViewById(R.id.name);
v、 check=(复选框)view.findViewById(R.id.check);
v、 phone=(TextView)view.findViewById(R.id.no);
v、 imageView=(imageView)view.findViewById(R.id.pic);
最终选择用户数据=(选择用户)\ u data.get(i);
v、 title.setText(data.getName());
//v.check.setChecked(data.getCheckedBox());
v、 setText(data.getPhone());
最终选择用户p=getProduct(i);
v、 check.setOnCheckedChangeListener(myCheckChangeList);
v、 检查setTag(i);
v、 检查。设置检查(p.isSelected);
//设置图像(如果存在)
试一试{
if(data.getThumb()!=null){
v、 setImageBitmap(data.getThumb());
}否则{
v、 setImageResource(R.drawable.ic_启动器);
}
//设置圆形图像
位图bm=BitmapFactory.decodeResource(view.getResources(),R.drawable.ic_启动器);//加载默认图像
//RoundeImage=新的RoundImage(bm);
//v、 imageView.setImageDrawable(圆形图像);
}捕获(OutOfMemory错误){
//添加默认图片
v、 setImageDrawable(this.u c.getDrawable(R.drawable.ic_启动器));
e、 printStackTrace();
}
Log.e(“Image Thumb”,“--------------”+data.getThumb());
//设置复选框
v、 check.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
复选框=(复选框)视图;
如果(checkBox.isChecked()){
data.setCheckedBox(真);
Log.i(“cdcd”,“onItemClick:+data.toString());
}否则{
data.setCheckedBox(假);
}
}
});
view.setTag(数据);
返回视图;
}
//过滤类
公共空过滤器(字符串图表文本){
charText=charText.toLowerCase(Locale.getDefault());
_data.clear();
如果(ChartText.length()==0){
_data.addAll(arraylist);
}否则{
对于(选择用户wp:arraylist){
if(wp.getName().toLowerCase(Locale.getDefault())
.contains(图表文本)){
_添加数据(wp);
}
}
}
notifyDataSetChanged();
}
//对于复选框。。。。。。。。。。。。。。。。
选择用户获取产品(int位置){
返回((SelectUser)getItem(position));
}
ArrayList getBox(){
ArrayList box=新的ArrayList();
用于(选择用户p:arraylist){
如果(p.i当选)
框。添加(p);
}
返回框;
}
CompoundButton.OnCheckedChangeListener myCheckChangeList=新建CompoundButton.OnCheckedChangeListener(){
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
getProduct((整数)按钮View.getTag()).isSelected=isChecked;
字符串结果=“999”;
对于(选择用户pp:getBox()){
如果(第1页){
结果+=”,“+pp.phone;//phonenumberrutils.formatNumber(pp.phone)
列表=新的ArrayList();
列表。添加(结果);
}
}
blockedlist=String.valueOf(列表);
Toast.makeText(_c,String.valueOf(blockedlist),Toast.LENGTH_LONG.show();
}
};
静态类视窗夹{
图像视图图像视图;
文本视图标题,电话;
复选框检查;
}

}

在首选项数据中存储复选框的值,每次打开应用程序时从首选项中获取值。

在首选项数据中存储复选框的值,每当打开应用程序时,从首选项中获取值。

为每个复选框获取布尔值。

为每个复选框获取布尔值。

将复选框的状态存储在首选项中,并在创建UI时将其拉出。您回答了自己的问题…使用SharedReferences。
如何在重新打开应用程序后保存选中的复选框项目
???在关闭应用程序之前?是的,我尝试了..通过使用共享首选项,我传递了选中的复选框值..同时将该SharedReference值设置为v.check.setChecked(p.isSelected);在上下滚动时,其他一些复选框也会自动被选中。在首选项中存储复选框的状态,并在创建UI时将其拉出。您回答了自己的问题…使用SharedReferences。
如何在重新打开应用程序后保存选中的复选框项目
???在关闭应用程序之前?是的,我尝试了..使用共享