【问题标题】:Reading SharedPreferences data in Fragment, within FragmentActivity在 FragmentActivity 中读取 Fragment 中的 SharedPreferences 数据
【发布时间】:2013-02-22 19:31:13
【问题描述】:

我正在尝试将用户在登录屏幕Settings.java 下方输入的名称保存到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();
    }

}

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;


    }

我可以左右滚动并进入下面看到的片段 TestFragment2.java....但是它没有读取,或者我在 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);
}

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

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

【问题讨论】:

    标签: android sharedpreferences android-fragmentactivity


    【解决方案1】:

    我认为你在打电话

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 2012-05-05
      • 2018-02-13
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多