简体   繁体   中英

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM