从MainActivity到Fragment问题的非静态字符串变量

时间:2014-04-17 12:00:23

标签: java android android-fragments

我有一个MainActivity包含一串字符串,用户可以在此活动中修改这些字符串。 activity_mainmainActivityfragment组成。我希望这些字符串能够来到FragmentActivity()。 问题是我不能使用bundle,因为它返回null,但我知道这是因为,对于mainActivity,字符串的值是null onStart,因此当你发送它时在开头的片段中,它会发送所有带有null值的字符串(因为用户尚未在MainActivity中编辑字符串)。 如果字符串被修改后,如何直接从MainActivity类中获取字符串。

我目前的解决方案:

MainActivity();

Bundle bundle1 =new Bundle();
bundle1 .putString("string1", string1);
bundle1 .putString("string2", string2);
Fragment Fragment = new Fragment();
Fragment.setArguments(bundle1);

FragmentClass();

final Bundle bundle1 = this.getArguments();

if(bundle1 != null){
    string1 = getArguments().getString("string1");
    string2 = getArguments().getString("string2");
}

3 个答案:

答案 0 :(得分:1)

你错了吗

if(bundle1 != null){
string1 = getArguments().getString(string1);
string2 = getArguments().getString(string2);
}

更正,如下所示:

 if(bundle1!= null){
   String string1=getArguments().getString("String1"); // Provide Double Quotes 
   String string2=getArguments().getString("String2"); // Provide Double Quotes 
  }

答案 1 :(得分:1)

  

如何直接从MainActivity Class获取字符串   在他们被修改之后。

使用SharedPreferences ---

public void setSetting(String key, String value) {

    if(getActivity() != null)
    {
        SharedPreferences settings = getActivity().getSharedPreferences("ProjectPref", 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString(key, value);

        // Commit the edits!
        editor.commit();
    }
}

public String getSetting(String key, String def) {

    try
    {
    SharedPreferences settings = getActivity().getSharedPreferences("ProjectPref", 0);
    return settings.getString(key, def);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

    return "";
}

<强> MainActivity();

setSetting("String1",String1);
setSetting("String2",String2);

注意:在用户修改字符串时使用方法setSetting,以获取存储在共享首选项中的最新值。

<强> FragmentClass();

String string1 = getSetting("String1", "");
String string2 = getSetting("String2", "");

在这里,您可以分别在变量string1和string2中获取这些值。

有关SharedPreferences的详情。

答案 2 :(得分:0)

您没有从捆绑中获取字符串。

String1 = getArguments().getString(String1);

需要

String1 = getArguments().getString("String1");