Send values from ViewPager Activity to a Fragment by bundle
Solution 1
You have to set your Bundle through setArguments() method, not the intent. If you have a ViewPager, you can pass your arguments to the PagerAdapter, and set the arguments when the Fragment is being instantiated.
I don't get how your SIDE is calculated and what does it mean, so I show the general ide.
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_slide);
Bundle bundle = new Bundle();
bundle.putInt("SIDE",2);
mPager = (ViewPager)findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager(), bundle);
mPager.setAdapter(mPagerAdapter);
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{
private final Bundle fragmentBundle;
public ScreenSlidePagerAdapter(FragmentManager fm, Bundle data){
super(fm);
fragmentBundle = data;
}
@Override
public ScreenSlidePageFragment getItem(int arg0) {
final ScreenSlidePageFragment f = new ScreenSlidePageFragment();
f.setArguments(this.fragmentBundle);
return f;
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
Fragment
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
final Bundle args = getArguments();
final int side = args.getInt("SIDE");
}
Solution 2
This might not be the solution you are exactly asking for but it is what I do and it may help someone:
Create a public method in your fragment:
public void doSomething(String myValue){
// Do stuff in your fragment with myValue
}
In your activity, get the fragment from your Adapter. You know which fragment it is based on order it was added in. Execute your fragment method, passing in your variable(s):
// Get FriendsFragment (first fragment)
MyFragment fragment = (MyFragment) mAdapter.getItem(0);
fragment.doSomething("some-value");
Ricardo Filipe
Updated on August 03, 2020Comments
-
Ricardo Filipe almost 4 years
I have an ViewPager Activity that call the fragment that represent the slide layout.
What i need is pass values from activity to fragment by bundle. How i can do this? I try pass a int 2 in onCreate() but not work and i
Activity:
@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_screen_slide); Intent intent = new Intent(this,ScreenSlidePageFragment.class); Bundle bundle = new Bundle(); bundle.putInt("SIDE",2); intent.putExtras(bundle); /** * Instantiate a ViewPager and a PagerAdapter */ mPager = (ViewPager)findViewById(R.id.pager); mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); mPager.setAdapter(mPagerAdapter); mPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { if(itemOld > arg0){ auxBack--; SIDE=1; } else if(itemOld < arg0){ auxFront++; SIDE=0; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } }); } @Override public void onBackPressed(){ if(mPager.getCurrentItem()==0){ super.onBackPressed(); }else{ mPager.setCurrentItem(mPager.getCurrentItem()-1); } } /** * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in sequence */ private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{ public ScreenSlidePagerAdapter(FragmentManager fm){ super(fm); } @Override public ScreenSlidePageFragment getItem(int arg0) { return new ScreenSlidePageFragment(); } @Override public int getCount() { //Toast.makeText(getApplicationContext(), "Num pages " + NUM_PAGES, Toast.LENGTH_LONG).show(); return NUM_PAGES; } }
}
Fragment:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { int tID = ((ScreenSlidePagerActivity)getActivity()).getIntent().getExtras().getInt("SIDE"); Toast.makeText(getActivity(), "Side selected....." +tID, Toast.LENGTH_LONG).show();