Android 如何避免重复替换相同的片段?
我正在创建我的第一个android应用程序。做完必要的作业后,我带着孩子来这里寻求帮助 片段A可以从导航抽屉中调用。同样,若我滑动导航栏并调用片段A,它的重叠可能会调用片段A。问题是用户必须单击后退两次才能进入主屏幕 我分享了一些截图和片段 正在启动片段A(Help\u Fragment()) 一次创建Android 如何避免重复替换相同的片段?,android,android-fragments,navigation-drawer,Android,Android Fragments,Navigation Drawer,我正在创建我的第一个android应用程序。做完必要的作业后,我带着孩子来这里寻求帮助 片段A可以从导航抽屉中调用。同样,若我滑动导航栏并调用片段A,它的重叠可能会调用片段A。问题是用户必须单击后退两次才能进入主屏幕 我分享了一些截图和片段 正在启动片段A(Help\u Fragment()) 一次创建 protected void onCreate(Bundle savedInstanceState) { Log.d(taglaunch, "on Create - AppDrawer
protected void onCreate(Bundle savedInstanceState) {
Log.d(taglaunch, "on Create - AppDrawer");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_appdrawer);
mainActivityAdapter = new MainActivityAdapter(getFragmentManager());
navigate();
switchtofragment();
getFragmentManager().addOnBackStackChangedListener(backStackListener);
}
public void switchtofragment() {
tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("TAB1"));
tabLayout.addTab(tabLayout.newTab().setText("TAB2"));
viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setAdapter(mainActivityAdapter);
tabLayout.setOnTabSelectedListener(this);
tabLayout.setupWithViewPager(viewPager);
}
public void navigate() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
您可以使用片段管理器的findFragmentByTag()方法检查帮助片段是否已经存在。如果它不存在,则可以继续创建一个。除此之外,replace方法将替换通过编程方式添加到容器(如框架布局)中的片段。但这个解决方案可能只是一个变通办法。试试这个,让我们知道。:) 代码:-
FragmentManager manager=getSupportFragmentManager();
Help_Fragment fragment1= (Help_Fragment) manager.findFragmentByTag("Help_Fragment");
if(fragment1==null)
{
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Log.d(taglaunch, "Switching to Help Fragment");
Fragment fragment = new Help_Fragment();
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,
R.animator.slide_out_right, R.animator.exit_to_left, R.animator.exit_to_right);
fragmentTransaction.replace(R.id.app_bar, fragment,"Help_Fragment").addToBackStack(null).commit();
}
else{
// Display a Toast that fragment exists
}
如果片段存在,您可以使用下面的代码替换片段
有几种方法可以检查哪个是当前片段(显示),您可以在
createHelp()
或其他“替换”片段的方法中执行此检查,如果当前显示的片段与正在显示的片段类型相同,只需返回代码>我想你可以在这里找到答案:@Yazan谢谢你的帮助:)
FragmentManager manager=getSupportFragmentManager();
Help_Fragment fragment1= (Help_Fragment) manager.findFragmentByTag("Help_Fragment");
if(fragment1==null)
{
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Log.d(taglaunch, "Switching to Help Fragment");
Fragment fragment = new Help_Fragment();
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,
R.animator.slide_out_right, R.animator.exit_to_left, R.animator.exit_to_right);
fragmentTransaction.replace(R.id.app_bar, fragment,"Help_Fragment").addToBackStack(null).commit();
}
else{
// Display a Toast that fragment exists
}
public void loadFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, fragment);
transaction.commitAllowingStateLoss();
}