【问题标题】:Android Studio Navigation Drawer fragments overlappingAndroid Studio 导航抽屉片段重叠
【发布时间】:2020-09-10 11:37:57
【问题描述】:

我已在我的项目中添加了一个导航抽屉活动,并且我正在尝试将项目添加为片段。这是我在主要活动中所做的。

fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.nav_host_fragment, new HomeFragment());
        fragmentTransaction.commit();

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
           public boolean onNavigationItemSelected(@NonNull MenuItem item)
            {
                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                drawer.closeDrawer(GravityCompat.START);
                int id = item.getItemId();
                if (id == R.id.nav_home)
                {
                    fragmentManager = getSupportFragmentManager();
                    fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.nav_host_fragment, new HomeFragment());
                    fragmentTransaction.commit();

                }
                else if(id == R.id.Shopping_list)
                {
                    fragmentManager = getSupportFragmentManager();
                    fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.nav_host_fragment, new ShoppingListFragment());
                    fragmentTransaction.commit();
                }
                else if(id == R.id.nav_Language)
                {
                    fragmentManager = getSupportFragmentManager();
                    fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.nav_host_fragment, new FragmentLang());
                    fragmentTransaction.commit();
                }

默认片段是 Home,它工作正常,如预期的那样,但其他片段与 Home Fragment 重叠。 (HomeFragment 是唯一可以正常工作的)。 我在每个 Fragment 类中都做了类似的事情:

public class ShoppingListFragment extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
   View view = inflater.inflate(R.layout.fragment_shopping_list, container,false);
   return view;
    }

}

我看不出错误在哪里。一切看起来都不错,但所有其他片段都显示在 HomeFragment 上。

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    片段管理器维护所有之前被替换的片段的堆栈,有时后面的堆栈片段与我们替换的片段重叠,添加这一行

    fragmentManager.popBackStack(); 
    

    像这样,

    fragmentManager = getSupportFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.nav_host_fragment, new HomeFragment());
    fragmentManager.popBackStack();
    fragmentTransaction.commit();
    
            
    

    希望会有所帮助。快乐编码:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      相关资源
      最近更新 更多