在这里,我将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");
}
}
如果我没记错,
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());
在这种情况下,标记将是您的片段类名称。