我有一个包含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;
}
}
如果您需要其他代码,请告诉我们!
我想在这里做的只是保留所有复选框值,并保留变量值,即使应用程序已关闭!
答案 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));