无法将数据从活动传递到片段

时间:2017-01-19 04:06:56

标签: android android-fragments

我将数据从活动传递到片段时出现问题,它表示空指针异常,但我的数据不为空。

这是我的活动:

@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);
}

感谢您的帮助。

3 个答案:

答案 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将其传递给属于此活动的片段。