我将数据从活动传递到片段时出现问题,它表示空指针异常,但我的数据不为空。
这是我的活动:
@Override
public void onResponse(Call call, Response response) throws IOException {
dataj = response.body().string();
System.out.println(dataj);
Bundle bundle = new Bundle();
bundle.putString("datak", dataj);
FragmentUtama fu = new FragmentUtama();
fu.setArguments(bundle);
Intent load = new Intent(LoginActivity.this, MainActivity.class);
load.putExtra("datajs", dataj);
startActivity(load);
finish();
}
这是我的片段:
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
String datas = getArguments().getString("datak");
System.out.println(datas);
return inflater.inflate(R.layout.fragment_utama, container, false);
}
感谢您的帮助。
答案 0 :(得分:2)
您不会通过Intents将数据传递给片段。通过在调用Fragment transaction commit之前将它们设置为片段实例来传递参数。
SomeFragment f = new SomeFragment ();
// Supply data input as an argument.
Bundle args = new Bundle();
args.putInt("some_key", value);
f.setArguments(args);
然后你在你的片段中读到它。
注意:只能在将Fragment附加到Activity之前调用setArguments。因此,如果片段已经附加,它将不会将任何数据传输到片段。
Bundle args = getArguments();
int value = args.getInt("some_key", 0);
答案 1 :(得分:0)
你可以试试这个,
使用findFragmentByTag它将帮助您查找片段并通过它发送数据。
FragmentUtama fu =(FragmentUtama)getSupportFragmentManager().findFragmentByTag(FragmentUtama.class.getSimpleName())
Bundle bundle = new Bundle();
bundle.putString("datak", dataj);
fu.setArguments(bundle);
或
您可以在片段中使用一个setter方法,并将数据从activity设置为片段
来自活动。
fu.setData(dataj);
片段
String data;
public void setData(String data)
{
this.data=data;
}
使用片段的getter方法
使用数据public String getData()
{
return data;
}
答案 2 :(得分:0)
您需要使用intent的额外内容将数据传递给MainActivity,然后在将该片段替换/添加到其容器时使用setArguments将其传递给属于此活动的片段。