How to send data from Activity to Fragment

I know that there are many topics. I also read the documentation many times, but I cannot find a better way to pass data from activity to fragment.

I want to show the results of my search activity in two different layouts (list and map) by scrolling through tabbed views . I need to pass 2 data into fragments: "currentLocation", which is the current location of the user, and "result", which is a list of objects.

I skipped some parts of my code to make it more understandable.

SearchableActivity.java

public class SearchableActivity extends ActionBarActivity implements TabListener { List<PlaceModel> result = new ArrayList<PlaceModel>(); private SearchView mSearchView; private String currentLocation; AppSectionsPagerAdapter mAppSectionsPagerAdapter; ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_searchable); final ActionBar actionBar = getSupportActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager()); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mAppSectionsPagerAdapter); mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); actionBar.addTab(actionBar.newTab().setText("List").setTabListener(this)); actionBar.addTab(actionBar.newTab().setText("Map").setTabListener(this)); // get currentLocation here handleIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { handleIntent(intent); } private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { final String query = intent.getStringExtra(SearchManager.QUERY); // get result here } } @Override public void onTabReselected(Tab arg0, FragmentTransaction arg1) { // TODO Auto-generated method stub } @Override public void onTabSelected(Tab tab, FragmentTransaction arg1) { mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab arg0, FragmentTransaction arg1) { // TODO Auto-generated method stub } 

}

PlaceListFragment.java

 public class PlaceListFragment extends Fragment { ListView listViewData; PlaceAdapter placeAdapter; List<PlaceModel> result = new ArrayList<PlaceModel>(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_list, container, false); Bundle args = getArguments(); listViewData = (ListView) rootView.findViewById(android.R.id.list); // I will pass result and currentLocation here placeAdapter = new PlaceAdapter(getActivity(), R.layout.fragment_list_item, result, currentLocation); listViewData.setAdapter(placeAdapter); return rootView; } } 

AppSectionsPagerAdapter.java

 public class AppSectionsPagerAdapter extends FragmentPagerAdapter { final int PAGE_COUNT = 2; public AppSectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int arg0) { Bundle data = new Bundle(); switch(arg0) { case 0: PlaceListFragment fragment1 = new PlaceListFragment(); fragment1.setArguments(data); return fragment1; default: PlaceListFragment fragment2 = new PlaceListFragment(); fragment2.setArguments(data); return fragment2; } } @Override public int getCount() { return PAGE_COUNT; } } 
+7
android android-layout android-fragments android-view android-tabs
source share
6 answers

Usually actions will have a link to their fragments. In SearchableActivity.java you also load PlaceListFragment.java either in setContentView(activity_searchable.xml); , or you need to create an instance of the fragment and add / replace the fragment using FragmentTransaction .

you can find a good example here on how to exchange between fragments or between activity and fragment.

Training link

+6
source share

From the operation, you send data with the intention of:

 Bundle bundle=new Bundle(); bundle.putString("name", "From Activity"); //set Fragmentclass Arguments Fragmentclass fragobj=new Fragmentclass(); fragobj.setArguments(bundle); 

and in the Fragment onCreateView method:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String strtext=getArguments().getString("name"); return inflater.inflate(R.layout.fragment, container, false); } 
+29
source share

Find the fragment in Activity onCreate and set the data for the method that you write in your fragment:

  ExampleFragment rf = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.exampleFragment); if(rf!=null){ rf.setExample(currentExample); } 

"CurrentExample" is what you want to send to your setExample method in your fragment.

 public void setExample(ExampleObject currentExample){ currentExampleInFragment = currentExample; } 

You can use the data in the onActivityCreated Fragment method.

Not sure if this is a good solution or not, but I found it the easiest to pass objects.

+7
source share
 Bundle bundle = new Bundle(); bundle.putString("edttext", "From Activity"); // set Fragmentclass Arguments Fragmentclass fragobj = new Fragmentclass(); fragobj.setArguments(bundle); 

and in the Fragment onCreateView method:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String strtext = getArguments().getString("edttext"); return inflater.inflate(R.layout.fragment, container, false); } 

see more answer here ..

+4
source share

"send data from Activity to Fragment

Activity:

  Bundle bundle = new Bundle(); bundle.putString("message", "Alo Stackoverflow!"); FragmentClass fragInfo = new FragmentClass(); fragInfo.setArguments(bundle); transaction.replace(R.id.fragment_single, fragInfo); transaction.commit(); 

Fragment:

Reading value in fragment

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Bundle bundle = this.getArguments(); String myValue = bundle.getString("message"); ... ... ... } 

or

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String myValue = this.getArguments().getString("message"); ... ... ... } 
+1
source share

Create one session model class and in the Activity set the values ​​that you want to pass to the data, and then in Fragment you can get these values ​​from the session model class

eg. from your activity you can establish such an option.

  AllEventDetails.getInstance().setEvent_description(event_Description); AllEventDetails.getInstance().setDj_name(dj_name); AllEventDetails.getInstance().setMusic_theme(music_theme); AllEventDetails.getInstance().setClub_name(club_name); AllEventDetails.getInstance().setDate(event_date); AllEventDetails.getInstance().setBanner_image_path(banner_image_path); AllEventDetails.getInstance().setEvent_title(event_title); 

and from your fragment you can get such an option.

 AllEventDetails.getInstance().getClub_name() ......... 

Creating a session model class is as follows.

 public class AllEventDetails { private static AllEventDetails mySession ; private String event_description; private String dj_name; private String music_theme; private String club_name; private String date; private String banner_image_path; private String event_title; private AllEventDetails() { event_description = null; dj_name = null; music_theme = null; club_name = null; date = null; banner_image_path = null; event_title = null; } public static AllEventDetails getInstance() { if( mySession == null ) { mySession = new AllEventDetails() ; } return mySession ; } public void resetSession() { mySession=null; } public String getEvent_description() { return event_description; } public void setEvent_description(String event_description) { this.event_description = event_description; } public String getDj_name() { return dj_name; } public void setDj_name(String dj_name) { this.dj_name = dj_name; } public String getMusic_theme() { return music_theme; } public void setMusic_theme(String music_theme) { this.music_theme = music_theme; } public String getClub_name() { return club_name; } public void setClub_name(String club_name) { this.club_name = club_name; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getBanner_image_path() { return banner_image_path; } public void setBanner_image_path(String banner_image_path) { this.banner_image_path = banner_image_path; } public String getEvent_title() { return event_title; } public void setEvent_title(String event_title) { this.event_title = event_title; } } 
0
source share

All Articles