如果该片段已经打开,如何阻止从导航抽屉打开片段,打开片段并在NavigationDrawer项目中单击片段再次重新创建,那么如何检查片段是否已经打开?
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (id == R.id.fragmentA) {
{ FragmentA fragment = new FragmentA();
transaction.add(R.id.main_screen, fragment1, "MainFrag").addToBackStack(null);
}
} else if (id == R.id.fragmentB) {
FragmentB fragment = new FragmentB();
transaction.add(R.id.main_screen, fragment).addToBackStack(null);
} else if (id == R.id.fragmentC) {
FragmentC fragment = new FragmentC();
transaction.replace(R.id.main_screen, fragment).addToBackStack(null);
}
答案 0 :(得分:1)
我用这种方式解决了它:
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
Fragment f = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (id == R.id.n_1 && !(f instanceof MainFragment)) {
MainFragment fragment = new MainFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
} }
答案 1 :(得分:0)
例如我在片段B中,当我点击片段B时 再次从它重新创建的NavigationDrawer,所以如何检查是否 片段已经显示在屏幕上了吗?
如果您引用了NavigationDrawer
中的片段B,则可以致电mFragmentB.isAdded()
以了解它是否已经显示。
答案 2 :(得分:0)
添加片段时使用标签来替换它。
transaction.replace(R.id.main_screen, fragment, tag);
现在,当单击菜单项时,使用片段管理器使用标记获取可见片段:
public boolean isFragmentCurrentlyVisible(String fragmentTag){
Fragment fragmentToTest;
fragmentToTest = fragmentManager.findFragmentByTag(fragmentTag);
if(fragmentToTest!=null && fragmentToTest.isVisible())
return true;
return false;
}
根据上述方法返回的值,您可以添加片段(如果尚未添加)。