0

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

公共类设置扩展活动实现 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();
}

}

由于时间很短,任何帮助将不胜感激:(

4

2 回答 2

1

这个

您没有编码的是保存数据。

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

第二行的意思是,“CHECKBOX”是保存的共享首选项吗?不,不是。好的,让我们获取默认值 false 。

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

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

第一行定义了 sharedpreference 编辑器。下一行将布尔值 true 保存在 CHECKBOX 的有效文件名(键)下,然后提交行说,好的,请执行上述操作并完成它,以便现在每当我调用时:

sp.getBoolean("CHECKBOX",false);

我会得到真实的,因为我不必使用默认值 false。

于 2012-12-12T01:49:59.423 回答
1

试着让这对你来说很容易......

首先,在您的偏好 xml 中,每个文本框和复选框都需要它自己的键。

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

例如字符串: void savePrefsString(String key, String value)

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

确保每一个都被正确调用(savePrefsBoolean 用于布尔值,savePrefsString 用于编辑文本)。

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

例子:

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);

然后从首选项设置值:

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());
于 2012-12-12T01:50:08.973 回答