从片段到活动之间的Android传输字符串

时间:2014-05-25 20:29:31

标签: java android android-fragments android-activity sharedpreferences

我试图完成将字符串值从Fragment传输到下面的Activity。转移的结果表明,当转移到活动时,该值为空。如果您需要更多信息,请与我们联系。

片段:

//put selected chapter title in memory

String selectedChapter = chapters[position];

SharedPreferences pref = getActivity().getPreferences(0);
SharedPreferences.Editor edt = pref.edit();
edt.putString("selectedChapter", selectedChapter);
edt.commit();

//launch activity
Intent intent = new Intent(getActivity(), ChapterDetailActivity.class);
startActivity(intent);

的活动:

   //retrieve selected chapter filename from previous view

    SharedPreferences pref = ChapterDetailActivity.this.getPreferences(0);
    String filename = pref.getString("selectedChapter", "empty");

    Log.e("File: ", filename);

2 个答案:

答案 0 :(得分:1)

我喜欢创建一个用于保存首选项的辅助类。这将使用文件名访问它们,而不是使用上下文。这意味着您的所有首选项都存储在一个位置,您可以创建常量来保存键。

当传递像"selectedChapter"这样的字符串文字时,编译器无法检查我们是否错误拼写了该值。通过创建常量,编译器将能够检查密钥是否存在。

public class PreferencesHelper {

    private SharedPreferences prefs;

    private static final String FILE_NAME = "com.yourpackage.yourapp.prefs";

    public static final String KEY_CHAPTER = "chapter";

    public PreferencesHelper(Context context) {
        prefs = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
    }


    /**
     * Save the specified value to the shared preferences
     * 
     * @param key
     *            The key of the value you wish to load
     * @param value
     *            The value to store
     */
    public void save(String key, String value) {
        prefs.edit().putString(key, value).commit();
    }


    /**
     * Load the specified value from the shared preferences
     * 
     * @param key
     *            The key of the value you wish to load
     * @param defValue
     *            The default value to be returned if no value is found
     */
    public int loadString(String key, String defValue) {
        return prefs.getString(key);
    }

}

然后,您的活动可以像这样访问它:

PreferencesHelper prefs= new PreferencesHelper(this);

你的片段就像​​这样:

PreferencesHelper prefs = new PreferencesHelper(getActivity());

并访问数据:

// Save
prefs.save(PreferencesHelper.KEY_CHAPTER, chapter);

// Load
prefs.load(PreferencesHelper.KEY_CHAPTER, null)  

答案 1 :(得分:0)

尝试另一种方法来获取您的SharedPreferences对象,例如使用上下文

 SharedPreferences _preferences = PreferenceManager.getDefaultSharedPreferences(_context);

您可以使用getApplicationContext()

获取上下文

然后阅读它,就像你拥有它一样:

 _preferences.getString(key,"");

和写:

 SharedPreferences.Editor editor = _preferences.edit();
 editor.putString(key, val);
 editor.commit();