这是否正确使用了Android片段和NavigationDrawer?
虽然我已经使用Android多年了,但这是我第一次在现实项目中使用这是否正确使用了Android片段和NavigationDrawer?,android,android-fragments,android-actionbar,navigation-drawer,Android,Android Fragments,Android Actionbar,Navigation Drawer,虽然我已经使用Android多年了,但这是我第一次在现实项目中使用片段。所以我有点困惑 此应用程序有一个带有4个主要部分的导航抽屉。我只使用了一个带有布局的主活动,它有一个内容视图,我将其替换为片段。当选择了NavigationDrawer中的一个选项时,我实例化了一个片段,并将其放在该内容视图中。我正在做这样的事情: private class DrawerItemClickListener implements ListView.OnItemClickListener { @
片段。所以我有点困惑
此应用程序有一个带有4个主要部分的导航抽屉。我只使用了一个带有布局的主活动
,它有一个内容视图
,我将其替换为片段
。当选择了NavigationDrawer
中的一个选项时,我实例化了一个片段
,并将其放在该内容视图中。我正在做这样的事情:
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
public static int drawerSelectedOption = 0;
private void selectItem(int position) {
drawerSelectedOption = position;
Fragment fragment = null;
switch (position) {
case 0:
fragment = new StoresFragment();
break;
case 1:
//promos
case 2:
fragment = new TransactionsFragment();
break;
case 3:
break;
case 4:
fragment = new Settings();
break;
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mSectionTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
OrderCreateFragment fragment = new OrderCreateFragment();
fragmentTransaction.add(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
我从前面的Fragment
ActionBar
菜单中推送这些内部片段,如下所示:
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
public static int drawerSelectedOption = 0;
private void selectItem(int position) {
drawerSelectedOption = position;
Fragment fragment = null;
switch (position) {
case 0:
fragment = new StoresFragment();
break;
case 1:
//promos
case 2:
fragment = new TransactionsFragment();
break;
case 3:
break;
case 4:
fragment = new Settings();
break;
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mSectionTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
OrderCreateFragment fragment = new OrderCreateFragment();
fragmentTransaction.add(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
我面临着几个问题,这就是我寻求有关此方法的一些建议的原因:
我甚至不知道如何正确管理ActionBar
菜单项。每个片段
都有自己的菜单,有时它们会卡在栏中(即,如果通过点击导航抽屉
切换片段
,而不是使用安卓后退键返回)
选择一个导航抽屉
选项时,应完全弹出StackBack
。我怀疑我的ActionBar
凌乱的项目与此相关,因为片段以某种方式保存在堆栈中
因此,请任何人提出建议,这是否是一种正确的方法,以及如何解决StackBack
和ActionBar
的问题
更新:
在selectItem方法上清除整个堆栈似乎解决了两个主要问题。尽管我仍然有兴趣听取关于这种方法的意见。
这是我用来学习导航抽屉的教程。我觉得它很有用。它经历了设置抽屉、将其链接到图标以及将片段上传到页面的过程。好吧,我认为最好的方法取决于应用程序的需要。考虑两种情况
A-应用程序需要导航抽屉和具有嵌套/深度导航的多个活动。
然后最好的方法是有一个基本活动,它有一个framelayout和navigationdrawer。所有活动都扩展/继承自此基本活动。
对于每个活动,膨胀各自的布局并以编程方式添加到baseActivity的framelayout容器中。
后堆栈导航更容易
B-应用程序需要导航抽屉&只有单层导航。
然后可以使用动态添加和替换具有导航抽屉的单个活动上的片段的概念。这与我实际遵循的教程相同。虽然对于他们展示的简单示例来说效果很好,但我认为对于更大的项目来说,这是一种非常错误的方法(即,有一个活动,所有的片段都从那里添加/替换,并且在每个导航抽屉选项中有几个级别)。我再也不会遵循这个例子了,你无法想象为了让应用程序正常运行,我需要解决多少问题和解决多少问题:-(