3

我做了一个小项目,我尝试使用共享首选项从编辑文本中更改名称。这是我的代码

SharePreferenceOwnActivity.java

public class SharePreferenceOwnActivity extends Activity {


    Button b1;
    TextView t1;


    /** Called when the activity is first created. */@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        b1 = (Button) findViewById(R.id.b1);
        t1 = (TextView) findViewById(R.id.t1);
        LoadPreferences();




        b1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                Toast.makeText(getApplicationContext(), "Settings", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent().setClass(SharePreferenceOwnActivity.this, SharepreferenceActivity.class);
                startActivity(intent);

            }
        });

    }
    private void LoadPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        String strSavedMem1 = sharedPreferences.getString("MEM1", "");
        t1.setText(strSavedMem1);

    }
}

SharepreferenceActivity.java

public class SharepreferenceActivity extends Activity {


    EditText e1;
    Button b2;
    /** Called when the activity is first created. */@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);


        e1 = (EditText) findViewById(R.id.e1);
        b2 = (Button) findViewById(R.id.b2);


        b2.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                SavePreferences("MEM1", e1.getText().toString());
                Intent intent = new Intent().setClass(SharepreferenceActivity.this, SharePreferenceOwnActivity.class);
                startActivity(intent);

            }
        });


    }

    private void SavePreferences(String key, String value) {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }
}

此处编辑文本不会更改文本视图。:(为什么?我没有得到错误

4

4 回答 4

4

您在以下陈述中有问题。

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);

根据谷歌文档

上面检索一个 SharedPreferences 对象,用于访问此活动私有的首选项

所以你所做的错误是

您在 Preference Object 中设置首选项,这是私有的 SharepreferenceActivity

您正在尝试从私有的 Preference Object 中读取SharePreferenceOwnActivity

所以解决方案是

代替

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);

经过

SharedPreferences sharedPreferences = getSharedPreferences("MyPref",
                                      Context.MODE_PRIVATE);

在两项活动中。

于 2012-06-28T06:25:33.980 回答
1

LoadPreferences()在 SharePreferenceOwnActivity Activity 上调用onResume() 方法:

 @Override
    protected void onResume() {
        super.onResume();
        // Call here
       LoadPreferences();
    }

并将 SavePreferences 和 LoadPreferences 方法更改为:

在 SharepreferenceActivity 活动中:

private void SavePreferences(String key, String value) {
SharedPreferences sharedPreferences = getSHaredPreferences("aapname",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
    }
}

在 SharePreferenceOwnActivity 活动中:

private void LoadPreferences() {
SharedPreferences settings = getSharedPreferences("aapname",Context.MODE_PRIVATE);
settings.getString("MEM1", "");
t1.setText(strSavedMem1);
}
于 2012-06-28T06:06:27.003 回答
1

您获得的两个首选项从一个活动到另一个活动不可见。代替

getPreferences(MODE_PRIVATE);

采用

getSharedPreferences("myPreferences", Context.MODE_PRIVATE);

你可以换成"myPreferences"任何你喜欢的。您应该在某处将其定义为静态字符串。

于 2012-06-28T06:13:56.170 回答
1
SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(getApplicationContext());

String strSavedMem1 = sharedPreferences.getString("MEM1", "");
t1.setText(strSavedMem1);

尝试在这两个活动中以这种方式声明 SharedPreferences。

SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(getApplicationContext());

SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();

当您在两个类中调用 startActivity() 时。试着打电话

finish();

在两个班级

于 2012-06-28T06:15:09.070 回答