首页 > 解决方案 > Android - 查看寻呼机返回功能在前两个选项卡中不起作用

问题描述

我在活动中使用了带有选项卡布局的 viewpager。It has 3 tabs, The issue is when selected tabs 1&2 back button is not working, and it's not able to go to the previous activity. 而且,在第三个选项卡中,后退按钮正在工作,我可以访问上一个活动。

我在 onBack 函数中给出了完成代码。然后它也不会进入上一个活动。

下面的代码描述了我如何在我的活动中设置 viewpager 和 tablayout。告诉我如何设置 Tab 1 和 Tab 2 的后退按钮。

class MainActivity
{

    TabLayout.Tab firsttab = tabs.newTab();
    firsttab.setText("Personal Details");
    tabs.addTab(firsttab);

    TabLayout.Tab secondtab = tabs.newTab();
    secondtab.setText("Employment");
    tabs.addTab(secondtab);

    TabLayout.Tab thirdtab = tabs.newTab();
    thirdtab.setText("Documents");
    tabs.addTab(thirdtab);


    Servicepageadapter adapter = new Servicepageadapter(getSupportFragmentManager(),tabs.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs));
    tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tapposition = tab.getPosition();

            viewPager.setCurrentItem(tab.getPosition());
        }

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

        }

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

        }
    });

    private class Servicepageadapter extends FragmentPagerAdapter {
        int mNumOfTabs ;
        public Servicepageadapter(FragmentManager fragmentManager, int tabCount) {
            super(fragmentManager);
            this.mNumOfTabs = tabCount;
        }

        @Override
        public Fragment getItem(int position) {

            switch (position){
                case 0:
                    boolean  isbackstack = true;
                    PersonalFragment tab1 = new PersonalFragment().newInstance("", "","");
                    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

                    if (!isbackstack) {
                        transaction.addToBackStack(null);
                    }
                    transaction.commit();
                   return tab1;

                case 1:

                    boolean  isbackstack1 = true;
                    EmploymentFragment tab2 = new EmploymentFragment().newInstance("", "","");
                    FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction();

                    if (!isbackstack1) {
                        transaction1.addToBackStack(null);
                    }
                    transaction1.commit();
                   return tab2;

                case 2:
                    boolean isbackstack2 = true;
                    DocumentsFragment tab3 = new DocumentsFragment().newInstance("", "","");
                    FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction();
                    if (!isbackstack2) {
                        transaction2.addToBackStack(null);
                    }
                    transaction2.commit();
                    return tab3;
                default:
                    return null;
            }

        }

        @Override
        public int getCount() {
            return mNumOfTabs;
        }
    }
}

标签: javaandroid

解决方案


问题是您正在执行FragmentTransactions in getItem。你不应该这样做:getItem只应该创建和返回Fragment,并让FragmentPagerAdapter自己处理其余的。

如果您想要默认的返回功能(将Activity/ 保留到上一个Activity),您可以简单地删除所有与事务相关的代码。如果您想要更多自定义功能(例如更改选项卡),那么您可以使用OnBackPressedDispatcher自定义它


推荐阅读