简体   繁体   中英

Can't pass data from activity to fragment

I have a problem with pass data from activity to fragment, it says null pointer exception, but my data is not null.

This is my activity :

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

and this is my fragment :

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

Thanks for your help.

You don't pass data to fragment via Intents. Arguments are passed by setting them to the fragment instance before calling 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);

then you read it in your fragment.

NOTE: setArguments can only be called before the Fragment is attached to the Activity. So if fragment is already attached, it will not transfer any data to the fragment.

Bundle args = getArguments();
int value = args.getInt("some_key", 0);

you may try this,

use findFragmentByTag it will help you to find fragment and send data over it.

 FragmentUtama fu =(FragmentUtama)getSupportFragmentManager().findFragmentByTag(FragmentUtama.class.getSimpleName())
 Bundle bundle = new Bundle();
 bundle.putString("datak", dataj);
 fu.setArguments(bundle);

or

you can have one setter method in fragment and set data from activity to fragment

from Activity.

fu.setData(dataj);

In fragment

String data;

public void setData(String data)
{
this.data=data;
}

use data using getter method of fragment

public String getData()
{
return data;
}

您需要使用 Intent 的 extras 将数据传递给 MainActivity,然后在将该片段替换/添加到其容器时使用 setArguments 将其传递给属于该活动的片段。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM