【问题标题】:How to start fragments after pressing on the action bar?按下操作栏后如何启动片段?
【发布时间】:2017-01-27 23:27:53
【问题描述】:

我制作了 2 个不同的片段,我希望它们显示在 2 个选项卡中。按下第一个选项卡后的一个片段,按下第二个选项卡后的另一个片段。在两个选项卡之间切换后,应该只显示一个片段。

我的第一个片段命名为“fragment”,第二个片段命名为“fragment2”

//Hallo ich hätte gerne tabs
            final ActionBar actionBar = getSupportActionBar();
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);



            //tab listener
            ActionBar.TabListener tabListener1 = new ActionBar.TabListener(){

                @Override
                public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {

                }

                @Override
                public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

                }

                @Override
                public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

                }
            };


            // für den zweiten tab
            ActionBar.TabListener tabListener2 = new ActionBar.TabListener(){

                @Override
                public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {

                }

                @Override
                public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

                }

                @Override
                public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

                }
            };



            //Tabs erstellen
            actionBar.addTab(actionBar.newTab().setText("Tab Nummer Eins").setTabListener(tabListener1));
            actionBar.addTab(actionBar.newTab().setText("Tab Nummer Zwei").setTabListener(tabListener2));

【问题讨论】:

    标签: java android android-fragments android-actionbar android-tabs


    【解决方案1】:

    当您与多个 Fragment 进行通信时,最好使用 FragmentStatePagerAdapter,它将在选定的相应选项卡上填充所需的 Fragment。

    首先在您的 xml 文件中创建 Toolbar、Tablayout、ViewPager。 然后创建 Fragment 和 Fragment2。

    将此代码包含在您的 HomeActivity.class 中

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.list_home));
        tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.save));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    
        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final PageAdapter adapter = new PageAdapter
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                Log.i("tag1","on tab");
                viewPager.setCurrentItem(tab.getPosition());// passing selected tab position to adapter and getting reuqired fragment
            }
    
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
    
            }
    
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
    
            }
        });
    

    像这样创建一个 PageAdapter...

    public class PageAdapter extends FragmentStatePagerAdapter {
    int mNumOfTabs;
    
    public PageAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
    
        this.mNumOfTabs = NumOfTabs;
    }
    
    @Override
    public Fragment getItem(int position) {
    
        switch (position) {
            case 0:
                Fragment tab1 = new Fragment(); //When click First tab 
                return tab1;
            case 1:
                Fragment2 tab2 = new Fragment2(); //When click on second tab
                return tab2;
            default:
                return null;
        }
    }
    
    @Override
    public int getCount() {
    
        Log.i("tag1","on getcount");
        return mNumOfTabs;
                        }
    }
    

    希望这会对您有所帮助。如果您需要任何进一步的帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      相关资源
      最近更新 更多