在FragmentActivity中读取Fragment中的SharedPreferences数据

时间:2013-02-22 19:31:14

标签: android sharedpreferences android-fragmentactivity

我正在尝试将用户在Settings.java下面的登录屏幕中输入的名称保存到sharedPreferenceTestFragment2.java将从SampleTabsDefault.java读取该名称,该名称是从另一个FragmentActivity调用的, 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(); } @Override public void onClick(View v) { // TODO Auto-generated method stub savePrefs("CHECKBOX", cb.isChecked()); if (cb.isChecked()) savePrefs("NAME", et.getText().toString()); Intent myIntent = new Intent("com.test.SAMPLETABSDEFAULT"); startActivity(myIntent); finish(); } }

Log in Screen Settings.java

Intent myIntent = new Intent("com.test.SAMPLETABSDEFAULT");startActivity(myIntent);

SampleTabsDefault.java 加载 class NavTabs extends FragmentPagerAdapter { public NavTabs(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch(position) { case 0: TestFragment fragment = new TestFragment(); return fragment; case 1: TestFragment2 fragment2 = new TestFragment2(); return fragment2; } TestFragment3 fragment3 = new TestFragment3(); return fragment3; } 就好了,它调用的所有片段也是如此。

sharedPreferences

我可以向左滚动并转到下面看到的片段TestFragment2.java ....但是它没有阅读,或者我正在使用TestFragment2.java @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myView = inflater.inflate(R.layout.fragment_2, container, false); text = (TextView)myView.findViewById(R.id.textView1); et = (TextView)myView.findViewById(R.id.textView3); cb = (CheckBox) myView.findViewById(R.id.checkBox1); loadPrefs(); return myView; } private void loadPrefs() { SharedPreferences sp = getActivity().getSharedPreferences("CHECKBOX", 0); boolean cbValue = sp.getBoolean("CHECKBOX", false); String name = sp.getString("NAME", "YourName"); if(cbValue){ cb.setChecked(true); }else{ cb.setChecked(false); } et.setText(name); } 进行非常翘头移动 SampleTabsDefault.java and TestFragment2.java TestFragment2.java

TestFragment2.java

textView我试图阅读并通过'setText();'申请Settings.java sharedPreferences与我在Settings.java上的方式相同。 String name = sp.getString("NAME", "YourName");中的代码确实有效,sharedPreference它会加载TestFragmnet2.java并显示用户上次运行应用程序时输入的名称,但在String name = sp.getString("NAME", "YourName");中显示相同的代码块从{{1}}

返回YourName

非常感谢任何帮助,谢谢!!

1 个答案:

答案 0 :(得分:8)

我认为你在打电话

SharedPreferences sp = getActivity().getSharedPreferences("CHECKBOX", 0);

错误地在TestFragment2的loadPrefs()方法

docs第一个参数(名称)是:

  

所需的偏好文件。如果此名称的首选项文件没有   存在,它将在您检索编辑器时创建   (SharedPreferences.edit())然后提交更改(Editor.commit())。

所以看起来你在TestFragment2中创建了一个名为“CHECKBOX”的新偏好文件。

可能会将loadPrefs()更改为与Settings.java中相同的用法,因此您可以调用之前使用的相同首选项,如下所示:

private void loadPrefs() {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity())
    boolean cbValue = sp.getBoolean("CHECKBOX", false);
    String name = sp.getString("NAME", "YourName");
    if(cbValue){
        cb.setChecked(true);
    }else{
        cb.setChecked(false);
    }
    et.setText(name);

}