在FragmentActivity中读取Fragment中的SharedPreferences数据

use*_*988 3 android sharedpreferences android-fragmentactivity

我正在尝试将用户在下面的登录屏幕中输入的名称保存Settings.java到a sharedPreference,这TestFragment2.java将从另一个FragmentActivity调用,SampleTabsDefault.java

登录屏幕 Settings.java

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

}
Run Code Online (Sandbox Code Playgroud)

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;


    }
Run Code Online (Sandbox Code Playgroud)

我可以向左滚动并获得下面看到的TestFragment2.java片段....但是它没有阅读,或者我正在做一个非常骷髅移动应用sharedPreferences内部TestFragment2.java SampleTabsDefault.java和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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

pet*_*tey 9

我想你在打电话

SharedPreferences sp = getActivity().getSharedPreferences("CHECKBOX", 0);
Run Code Online (Sandbox Code Playgroud)

在TestFragment2的loadPrefs()方法中不正确

文档 中第一个参数(名称)是:

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

所以看起来你正在TestFragment2中创建一个名为"CHECKBOX"的新的prefernces文件.

可能会更改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);
Run Code Online (Sandbox Code Playgroud)

}