我想在单击选项卡时显示两个片段

时间:2021-02-26 15:32:32

标签: java android android-fragments android-viewpager android-tablayout

It will be like this

如何使用TabLayout同时显示两个片段?

// main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


   <androidx.viewpager.widget.ViewPager
       android:id="@+id/pager"
       android:layout_width="match_parent"
       android:layout_height="200dp">

   </androidx.viewpager.widget.ViewPager>
   <androidx.viewpager.widget.ViewPager
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/viewPager">
      
      <com.google.android.material.tabs.TabLayout
          android:id="@+id/tab_layout"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          app:tabMode="scrollable"/>
      
   </androidx.viewpager.widget.ViewPager>
</LinearLayout>

// main.java

public class MainActivity extends AppCompatActivity {
    //initialize variable
    TabLayout tabLayout;
    ViewPager viewPager,pager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //assign variable
        tabLayout=findViewById(R.id.tab);
        viewPager=findViewById(R.id.viewPager);
        pager=findViewById(R.id.pager);

        viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
        pager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setupWithViewPager(pager);
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

    }

// pagerAdapter.java

public class PagerAdapter extends FragmentPagerAdapter {
    String[] text={"AAAA","BBBB","CCCC"};
    @SuppressLint("WrongConstant")
    public PagerAdapter(@NonNull FragmentManager fm) {
        super(fm, FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
    }
    @NonNull
    @Override
    public Fragment getItem(int position) {
        if(position==0){
            return new  AFragment();
        }
        if(position==1){
            return new  Bfragment();
        }
        if(position==2){
            return new  CFragment();
        }
        return null;
    }
    @Override
    public int getCount() {
        return text.length;
    }
    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return text[position];
    } }

如果你知道任何想法,你能帮我吗? How to display two fragments at the same time using TabLayout? 类似的问题,但我不知道如何将解决方案应用于我的任务

1 个答案:

答案 0 :(得分:0)

如果你想一次设置两个fragment那么你需要在Activity中设置两个Fragment Managers。简单!

当您更改选项卡时,您需要更改两个片段管理器的片段。 例如:您选择 Tab 1,然后在 First Top Fragment Manager 中设置 F1 并在 Bottom Fragment Manager 中设置 F2。 选择 Tab 2 后,在第一个 Top Fragment Manager 中设置 F3 并在 Bottom Fragment Manager 中设置 F4