Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change tab on button click in Android?

FragmentPagerSupport is a FragmentActivity class, FragmentA and FragmentB are representing 2 different tabs. In the First tab I have a EditText and a button. My task is to on button click need to open the 2nd tab and show the EditText value in the 2nd tab. I am also using a FragmentStatePagerAdapter.

Following code is building tabs onCreate() of FragmentActivity:

    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
        actionBar.addTab(actionBar.newTab()
                .setText(mSectionsPagerAdapter.getPageTitle(i))
                .setTabListener(this));
    }

My code in FragmentStatePagerAdapter is as follow:

public Fragment getItem(int position) {
    Fragment fragment = null;
    Bundle args = new Bundle();         
    switch (position) {
    case 0:
        fragment = FragmentA();
        args.putInt(FragmentA.ARG_SECTION_NUMBER, position + 1);
        fragment.setArguments(args);
    break;
    case 1:
        fragment = new FragmentB();
        args.putInt(FragmentB.ARG_SECTION_NUMBER, position + 1);
        fragment.setArguments(args);
    break;
    }
return fragment;
}

My code of FragmentA on button click is as follow:

confirmButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {


    }
}

Now I stuck here. Can't find what should be the code here to call the 2nd tab and show the value according to tab1 EditText value.

like image 639
ray Avatar asked Dec 16 '22 13:12

ray


1 Answers

Assuming your ViewPager is named mPager:

public void onClick(View view)
{
     mPager.setCurrentItem(1); // Change to page 1, i.e., FragmentB
}

I would suggest reading this training page in detail. It goes into some of the strategies used to pass information from Fragment to Fragment (generally by having the Activity implement an interface that the Fragment can then call).

It really depends on how coupled you want your Fragments to be. You could certainly use something like

((FragmentB)getActivity().getSupportFragmentManager().findFragmentByTag(
    "android:switcher:" + pager.getId() + ":1")).setExitText(text)

to pass the text from FragmentA to FragmentB, but that tightly couples your Fragments to each other and to the ViewPager the Activity contains.

I would suggest

  1. Make your Activity implement an Interface that contains a single method such as goToFragmentB(String exitText)
  2. Call this method in your FragmentA's onClick
  3. Have goToFragmentB:
    • Call a setExitText in FragmentB (use the above findFragmentByTag using that odd tag per the ViewPager source)
    • Set the pager to FragmentB
like image 57
ianhanniballake Avatar answered Jan 01 '23 11:01

ianhanniballake