如何在android中存储多个复选框值?

时间:2014-08-16 09:13:09

标签: android checkbox

我有一个包含textview和复选框的列表。列表中有3个项目。现在,当用户单击列表项或复选框时,我使用setAllCall()setNotContacts()setAllContacts()方法将其值存储在变量中,以了解哪个列表项已激活或停用。它全部在android。

现在,我面临两个问题:

1)当我单击后退按钮或关闭应用程序并再次返回列表视图页面时,所有复选框值都消失了。我的意思是所有复选框值都成为默认值。

2)即使我使用以下代码存储激活或停用设置的变量也会被破坏。因此,在我尝试检索这些变量值的其他一些活动中,总是默认值。

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

            callBlockOptions callBlockOptions = (callBlockOptions) this.getItem( position ); 


            CheckBox checkBox ; 
            TextView textView ; 

                        if ( convertView == null ) {
                convertView = inflater.inflate(R.layout.call_setting_list_item, null);


                textView = (TextView) convertView.findViewById( R.id.rowTextView );
                checkBox = (CheckBox) convertView.findViewById( R.id.CheckBox01 );

                convertView.setTag( new CallViewHolder(textView,checkBox) );

                checkBox.setOnClickListener( new View.OnClickListener() {
                    public void onClick(View v) {
                        CheckBox cb = (CheckBox) v ;
                        callBlockOptions callBlockOptions = (callBlockOptions) cb.getTag();

                        callBlockOptions.setChecked( cb.isChecked() );

                        String yo;

                        if(callBlockOptions.getPosition()=="0")
                        {
                            callBlockOptions.setAllCalls();
                        }

                        else if(callBlockOptions.getPosition()=="1")
                        {
                            callBlockOptions.setNotContacts();
                        }
                        else if(callBlockOptions.getPosition()=="2")
                        {
                            callBlockOptions.setAllContacts();
                        }


                    }
                });        
            }

            else {

                CallViewHolder viewHolder = (CallViewHolder) convertView.getTag();
                checkBox = viewHolder.getCheckBox() ;
                textView = viewHolder.getTextView() ;
            }

            checkBox.setTag( callBlockOptions ); 


            checkBox.setChecked( callBlockOptions.isChecked() );
            textView.setText( callBlockOptions.getName() );      

            return convertView;
        }

    }

如果您需要其他代码,请告诉我们!

我想在这里做的只是保留所有复选框值,并保留变量值,即使应用程序已关闭!

1 个答案:

答案 0 :(得分:2)

您可以使用共享首选项来存储值。使用这样的代码 -

public boolean getFromSP(String key){
            SharedPreferences preferences = ctx.getSharedPreferences("Contacts", android.content.Context.MODE_PRIVATE);
            return preferences.getBoolean(key, false);
            }
      private void saveInSp(String key,boolean value){
            SharedPreferences preferences = ctx.getSharedPreferences("Contacts", android.content.Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putBoolean(key, value);
            editor.commit();
            }

在你的getview方法中存储它就像这样 -

holder.checkBox.setOnClickListener(new View.OnClickListener() {

                   public void onClick(View v) {
                    if(((CheckBox)v).isChecked())
                    { 
                        saveInSp("check"+position,true);
                        Log.i("pos", ""+position);   

                    }       
                    else
                    {

                        saveInSp("check"+position,false);
                    }

要在加载listview时检索已选中复选框的状态,请在getview方法中使用它 -

 holder.checkBox.setChecked(getFromSP("check"+position));