将活动中的字符串变量传递给片段

时间:2014-03-14 15:49:40

标签: android android-fragments android-activity

您好我正在尝试将一个字符串变量从一个活动传递到一个片段,但它总是为空。

首先我设置变量值,然后在Activity:

中创建包
String results = setResultCaption(bothEarsBad, leftEarBad, rightEarBad).toString();

然后

Bundle bundle = new Bundle();
bundle.putString("resultsString", results);
RightEarResults rightEarResults = new RightEarResults();
rightEarResults.setArguments(bundle);

然后我从片段bundle方法调用onCreateView,如下所示:

String bundle = getArguments().getString("resultsString");

然后在TextView

中设置变量
txt = (TextView) rootView.findViewById(R.id.results_text);
txt.setText(bundle);

任何人都可以帮助我理解为什么它总是无效。

3 个答案:

答案 0 :(得分:1)

newInstance()提供Fragment方法并在那里移交参数:

public static YourFragment newInstance(String valueToPass) {

   YourFragment f = new YourFragment();

   Bundle b = new Bundle();
   b.putString("key", valueToPass);
   f.setArguments(b);

   return f;
}

Actitity

getSupportFragmentManager().beginTransaction().replace(R.id.container, YourFragment.newInstance(stringtoPass), "yourFragTag").commit();

Fragment内,您可以使用getArguments()方法检索该值:

String yourvalue = getArguments().getString("key");

编辑另外,请检查您的setResultCaption(...)方法是否实际返回了某些内容,而不是NULL。

答案 1 :(得分:0)

如果要在片段初始化时传递变量,可以:

  • 使用捆绑包作为Fragment.setArgument()方法

  • 的参数
  • 使用静态方法将变量作为参数。查看@Philipp Jahoda的答案。

如果您想在初始化后将变量传递给片段,可以参考官方文档中的this post

答案 2 :(得分:0)

您可以这样做:

来自您的活动;

Intent passIntent = new Intent(MainActivity.this, Yourclass.class);
passIntent.addExtra("resultsString",results);
startActivity(passIntent);

在你的片段中;

Intent intentBundle = getActivity().getIntent();
        String someresult= intentBundle.getStringExtra("resultsString");
        Log.i("Result : ", someresult);

然后,

txt = (TextView) rootView.findViewById(R.id.results_text);
txt.setText(someresult);