【问题标题】:How to transfer String from Fragment to Activity in Android如何在 Android 中将字符串从 Fragment 传输到 Activity
【发布时间】:2014-05-25 20:29:31
【问题描述】:

我正在尝试将字符串值从 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);

【问题讨论】:

  • 当您使用活动的获取首选项方法时,用于存储首选项的文件对于该活动将是唯一的(= 在您的应用程序的其他地方不可见)。已经发布的答案显示了两种创建应用程序范围首选项的方法。

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


【解决方案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)  

【讨论】:

  • getString(key) 需要另一个用于字符串值的参数。有什么想法吗?
  • 对不起,我的错误。它用于提供默认值,因此您可以根据需要传递null,或者只是一个空字符串,只要对您的应用程序最有意义。
【解决方案2】:

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

 SharedPreferences _preferences = PreferenceManager.getDefaultSharedPreferences(_context);

您可以在哪里使用 getApplicationContext() 获取上下文

然后阅读它就可以了:

 _preferences.getString(key,"");

对于写:

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

【讨论】:

  • 我试过这个方法,它一直在崩溃。我将键设置为诸如“章节”之类的值,将 val 设置为字符串。然后我不知道如何阅读 getString 方法,所以我把它作为一个(“章节”,“空”)。有什么想法吗?
  • 您的设备上有根吗?可能值得安装像根资源管理器这样的应用程序并进入 /data/data/your package name/sharedprefs 中的应用程序数据文件夹并检查首选项 XML 文件以查看您的写入是否成功?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多