如何在带有TabLayout的嵌套片段中使用findFragmentByTag

问题描述 投票:0回答:1

在这里,我将TabLayouts嵌套在Fragment中,这对我来说很好用,但我不只是想知道当TabLayouts不在应用程序前面时如何切换MainTabFragment的标签。我搜索了很长时间,发现findFragmentByTag可以使用,但是我不知道在我也必须切换Tabs的情况下该如何使用它。有关更多信息,我也在编写代码。

MainActivity中,当MainTabFragment在最前面时切换制表符,而当它不在最前面时调用该片段:

 Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.frame_container);
            if (currentFragment instanceof MainTabFragment) {  
           //Main Fragment
                MainTabFragment.pager.setCurrentItem(1);
          // Child Fragment of Main Fragment
                TopAdvisoryPagerFragment.pager.setCurrentItem(2);
            } else {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        fragment = new MainTabFragment();
                        changeFragments();                           
                    }
                }, 150);
            }
            mDrawerLayout.closeDrawer(mDrawerList);

  public void changeFragments() {

    if (fragment != null) {
        mPendingRunnable = new Runnable() {
            @Override
            public void run() {
                FragmentManager fragmentManager = getSupportFragmentManager();
                final Bundle bundle = new Bundle();
                bundle.putInt("pos_next", second_position);
                bundle.putInt("pos_end", third_position);
                fragment.setArguments(bundle);
                fragmentManager.beginTransaction().replace(R.id.frame_container, fragment, "TOP").addToBackStack(null).commit();
            }
        };        
        if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
            mDrawerLayout.closeDrawer(mDrawerList);
        }

    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}
android android-fragments android-tablayout
1个回答
0
投票

如果我没记错,

fragmentManager.beginTransaction().replace(com.cws.advisorymandi.R.id.frame_container, fragment, "TOP");

标签指的是“ TOP”,如果您使用相同的标签有不同的片段,将很难切换。您可以将代码更改为

fragmentManager.beginTransaction().replace(com.cws.advisorymandi.R.id.frame_container, fragment, fragment.getClass().getSimpleName());

在这种情况下,标记将是您的片段类名称。

© www.soinside.com 2019 - 2024. All rights reserved.