Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send data to fragment with FragmentTransaction

I'm in my fragment class calling this:

@OnClick(R.id.blockedLinkLayout)
public void onBlockedClick(){
    final FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.content, new SettingsBlockedUsersFragment(), FRAGMENT_TAG);
    ft.commit();
}

And it just replace my current fragment with chosen one.

And my question is, how can I send some data (e.g. String value) from my parent fragment to my child fragment using FragmentTransaction?

like image 432
y07k2 Avatar asked Mar 16 '16 16:03

y07k2


2 Answers

FragmentTransaction is simply to transition Fragments, it doesn't "pass" anything. You need to use a Bundle.

SettingsBlockedUsersFragment frag = new SettingsBlockedUsersFragment();
Bundle b = new Bundle();
// put stuff into bundle...
b.putString("user", "steve");

// Pass the bundle to the Fragment
frag.setArguments(b);

// Use Fragment Transaction
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, frag, FRAGMENT_TAG);
ft.commit();

Then inside the onCreate of the Fragment, you can do

String user = getArguments().getString("user");

Other ways to pass data into a Fragment are discussed at Best practice for instantiating a new Android Fragment

like image 193
OneCricketeer Avatar answered Oct 12 '22 23:10

OneCricketeer


Just pass them in a bundle as fragment arguments

in parent fragment :

SettingsBlockedUsersFragment fragment = new SettingsBlockedUsersFragment();
Bundle arguments = new Bundle();
arguments.putString( string_key , desired_string);
fragment.setArguments(arguments);
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, fragment , FRAGMENT_TAG);
ft.commit();

in child fragment :

Bundle arguments = getArguments();
String desired_string = arguments.getString(string_key);
like image 25
Mohsen fallahi Avatar answered Oct 13 '22 00:10

Mohsen fallahi