android中有多个保存的首选项

时间:2012-12-12 01:41:34

标签: android

我是java和android的新手但是尽我所能制作应用程序,基本上我想要一个带有6个文本框的页面,每个允许用户在每个中键入3位唯一值,检查确认框,然后一个按钮保存,然后当用户重新访问应用程序的这一部分数据仍然在那里,我设法让它工作1盒但如果我添加另一个它只是重复框1s值,这里是我的代码为班级

公共类设置扩展Activity实现OnClickListener {

CheckBox cb;
EditText et, et1;
Button b;
String test;


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);

    cb = (CheckBox) findViewById(R.id.checkBox1);
    et = (EditText) findViewById(R.id.editText1);
    b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(this);
    loadPrefs();
    cb.setChecked(false);       

}

private void loadPrefs() {

    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    boolean cbValue = sp.getBoolean("CHECKBOX", false);
    String name = sp.getString("NAME", "Kg");
    if(cbValue){
        cb.setChecked(true);
    }else{
        cb.setChecked(false);
    }
    et.setText(name + (" kg"));
    }




private void savePrefs(String key, boolean value) {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    Editor edit = sp.edit();
    edit.putBoolean(key, value);
    edit.commit();
}

private void savePrefs(String key, String value) {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    Editor edit = sp.edit();
    edit.putString(key, value);
    edit.commit();
}

public void onClick(View v) {
    // TODO Auto-generated method stub
    savePrefs("CHECKBOX", cb.isChecked());
    if (cb.isChecked())
        savePrefs("NAME", et.getText().toString());

    finish();
}

}

随着时间的推移,任何帮助都会受到极大的赞赏:(

2 个答案:

答案 0 :(得分:1)

阅读this

您未编码的是保存数据。

 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
 boolean cbValue = sp.getBoolean("CHECKBOX", false);

第二行所说的是" CHECKBOX"保存的共享偏好?不,它不是。好吧,让我们获得默认值false。

您需要做的是使用以下方法保存:

SharedPreferences.editor Editor = sp.edit();
Editor.putBoolean("CHECKBOX",true);
Editor.commit();

第一行定义共享首选项编辑器。下一行在CHECKBOX的有效文件名(键)下保存布尔值true,然后提交行说,好了,然后完成它,以便现在每当我调用时:

sp.getBoolean("CHECKBOX",false);

我会成真,因为我不必使用默认值false。

答案 1 :(得分:1)

尽量让你轻松...

首先,在你的proferences xml中,每个文本框和复选框都需要它自己的密钥。

其次,为了便于您阅读/理解,您应为pref保存方法指定一个不同的名称void savePrefs(String key,String value)。

例如String:void savePrefsString(String key,String value)

例如boolean:void savePrefsBoolean(String key,boolean value)

确保每个都被正确调用(savePrefsBoolean用于boolean,savePrefsString用于edittext)。

然后,对于每个编辑文本,您将需要从该edittext的首选项中检索密钥。

示例:

String name1 = sp.getString("NAME1", "Kg");
String name2 = sp.getString("NAME2", "Kg");
String name3 = sp.getString("NAME3", "Kg");

然后:

et1.setText(name1 + (" kg"));
et2.setText(name2 + (" kg"));
et3.setText(name1 + (" kg"));

对你的复选框做同样的事情(它们实际上是真/假布尔)。

示例:

boolean cb1 = sp.getBoolean("CHECKBOX1", false); //false is default value
boolean cb2 = sp.getBoolean("CHECKBOX1", false);
boolean cb3 = sp.getBoolean("CHECKBOX1", false);

然后从prefs:

设置值
if(cb1){
        cb1.setChecked(true);
    }else{
        cb1.setChecked(false);
    }

并保存用户按下的内容:

savePrefsBoolean("CHECKBOX1", cb1.isChecked()); // get check value of checkbox 
savePrefsBoolean("CHECKBOX2", cb2.isChecked());
savePrefsBoolean("CHECKBOX3", cb3.isChecked());