Change the viewpager snippet with buttonClick

I am trying to change a viewpager fragment by clicking on a button. I have 5 fragments, each fragment has its own XML file (frag1.xml, frag2.xml, etc.). Each fragment has 5 buttons that should go to other pages of the viewpager. But the problem is, how can I check in the FragmentPageAdapter, which button to click and how to get there?

I will show the code that I have, then it should be clear, I think. Think of it as the main screen with dots below, and I click on a specific point, you will go to the corresponding screen.

FragmentPagerAdapter

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ final int PAGE_COUNT = 6; /** Constructor of the class */ public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } /** This method will be invoked when a page is requested to create */ @Override public Fragment getItem(int arg0) { switch(arg0){ case 0: return new Fragment1(); case 1: return new Fragment2(); case 2: return new Fragment3(); case 3: return new Fragment4(); case 4: return new Fragment5(); default: return null; } } /** Returns the number of pages */ @Override public int getCount() { return PAGE_COUNT; } } 

Frag1.java

 public class Frag1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.frag_one, container, false); OnClickListener changeFrag = new OnClickListener() { @Override public void onClick(View v) { /*When I click this button in my fragment, I'd like it to go to fragment 3 for example*/ } }; ImageButton btnT = (ImageButton) v.findViewById(R.id.frag3); btnT.setOnClickListener(changeFrag); return v; } } 

Mainactivity

public class MainActivity extends FragmentActivity {

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);/** Getting a reference to the ViewPager defined the layout file */ ViewPager pager = (ViewPager) findViewById(R.id.pager); /** Getting fragment manager */ FragmentManager fm = getSupportFragmentManager(); /** Instantiating FragmentPagerAdapter */ MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm); /** Setting the pagerAdapter to the pager object */ pager.setAdapter(pagerAdapter); //pager.setPageTransformer(true, new ZoomOutPageTransformer()); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

Is something like this possible? Can someone help me in the right direction?

+8
android android-fragments android-viewpager imagebutton
source share
3 answers

I'm not sure what exactly you said about "Change."

If you are asking about the index of the display of the shift page, you can try

 ViewPager.setCurrentItem(int pageIndex, boolean isSmoothScroll); 

Or if you are asking about changing content, here's what I did

 public class MyPagerAdapter extends FragmentStatePagerAdapter { private FragmentManager fragMan; private ArrayList<Fragment> fragments=new ArrayList<Fragment>(); public void clearAll() //You can clear any specified page if you want... { for(int i=0; i<fragments.size(); i++) fragMan.beginTransaction().remove(fragments.get(i)).commit(); fragments.clear(); fragments=new ArrayList<Fragment>(); notifyDataSetChanged(); } public void addList() //Add some new fragment... { listFrag=new ListFragment(); fragments.add(list); } } 

Hope this helps ~

+22
source share

I am posting a new answer because - from what I see - the real response to the comment of the accepted answer:

โ€œYou have 2 ways to do it: 1) Place the ViewPager object as public so that you can access any of your fragments. 2) Stay on your ViewPager as a member of your FragmentActivity, send the broadcast from your Fragment to FragmentActivity and access your ViewPager. - RRTW May 28 '13 at 2:18 "

So thanks to RRTW for this answer, but I would like to improve it.

1) is NOT an option. The target of the fragments must be reused, therefore they must be independent of the Activity. Linking them to an activity is, in my opinion, bad practice, even if at the moment you are not reusing it for other activities.

2) It sounds very good, but I think he needs more explanation. The purpose of getAcitivty (). SendBroadcast () - send an event to all user system applications. This is definitely not what you want to achieve. So the good answer, from my point of view, is to use the LoacalBroadcastManager, and you can watch this post to understand how to use it.

+6
source share

In the main simple call, create a public Viewpager so that it can be obtained from other java files (for example, frag1.java)

MainActivity.Java:

public static ViewPager pager;

Now, in the Onclick () function inside frag1.java, just call mViewPager and set the element (fragment) to any fragment that you want to load. Ex. If you want to download the next snippet, you will set it to 2.

frag1.java

 public void onClick(View v) { ViewPager.setCurrentItem(2); } 
0
source share

All Articles