我有一个带复选框的自定义列表视图。我希望在应用程序的整个生命周期中保存复选框的状态。我怎样才能做到这一点?谢谢
答案 0 :(得分:2)
SharedPreferences类提供了一个通用框架,允许您保存和检索原始数据类型的持久键值对。
为了完整起见,我在此处提供示例代码。
public class Xxx extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Commit the edits!
editor.commit();
}
}
答案 1 :(得分:0)
你不应该在ListView中使用复选框,我更喜欢使用TableLayout。 但是,如果要使用ListView,请考虑以下先前的问题: -
Android save Checkbox State in ListView with Cursor Adapter
Finding the Checked state of checkbox in a custom listview
Code does not extend ListViewActivity, but does have a listview
关于同一主题还有很多其他问题,请考虑搜索它们。
编辑:动态TableLayout替换ListView
的示例XML: -
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout
android:id="@+id/table"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</TableLayout>
</ScrollView>
Java中的代码摘录: -
TableLayout table=(TableLayout)findViewByid(R.id.table);
ArrayList<CheckBox> cbData=new ArrayList<CheckBox>();
for(int i=0;i<rowCount;i++){
TextView t1=new TextView(this);
t1.setText("Text1");
TextView t2=new TextView(this);
t2.setText("Text2");
CheckBox cb=new CheckBox(this);
TableRow row=new TableRow(this);
row.addView(t1);
row.addView(t2);
row.addView(cb);
cbData.add(cb);
table.addView(row);
}
使用上面的代码,您可以在TableLayout中添加所需的行,并且由于TableLayout不会回收它的视图,因此您不必缓存复选框数据和状态。要访问CheckBoxes,您可以使用cbData.get(index)方法。比编码缓存复选框状态容易得多。