我尝试在我的应用程序中实现导航抽屉(材料设计)。我的活动包含带有片段的FrameLayout。当用户在导航抽屉FrameLayout中选择项目时,重新加载新片段:
listViewDrawer.setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick( AdapterView<?> parent, View view, int position, long id) {
drawerLayout.closeDrawer( listViewDrawer); // <<<-------
toolbar.setTitle( getResources().getString( R.string.title));
fragmentMain = new FragmentMain();
android.app.FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace( R.id.frameLayoutMain, ApplicationTapaKiosk.getInstance().fragmentMain)
.commit();
}
}
当我点击项目时,一切正常。导航抽屉关闭不顺利,但冻结(抽搐,抽搐),因为片段在后台重新加载。
如何顺利关闭导航抽屉?
抽屉关闭大约需要200毫秒。所以你可以这样做:
Handler mHandler = new Handler();
drawerLayout.closeDrawer( listViewDrawer);
mHandler.postDelayed(
new Runnable() {
@Override
public void run () {
loadFragment();
}
}
, NAVDRAWER_CLOSE_DELAY // 250...for delay
);
你必须决定你是否更喜欢:
替换FrameLayout
中的片段
,然后关闭DrawerLayout
或
关闭抽屉布局,然后替换片段。
只需在您的代码中进行这些更改:
listViewDrawer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
toolbar.setTitle(getResources().getString(R.string.title));
fragmentMain = new FragmentMain();
android.app.FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frameLayoutMain, ApplicationTapaKiosk.getInstance().fragmentMain)
.commit();
fragmentManager.executePendingTransactions(); // wait for the transaction to finish
drawerLayout.closeDrawer(listViewDrawer); // call closeDrawer(...) as a last thing
}
}
用户单击时设置某种标志:
listViewDrawer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mDrawerItemClicked = true;
drawerLayout.closeDrawer(listViewDrawer);
}
}
并设置抽屉布局。在您的抽屉布局上的抽屉式定位器,如下所示:
drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
if (mDrawerItemClicked){
mDrawerItemClicked = false;
toolbar.setTitle(getResources().getString(R.string.title));
fragmentMain = new FragmentMain();
android.app.FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frameLayoutMain, ApplicationTapaKiosk.getInstance().fragmentMain)
.commit();
}
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
在我的片段中,我通过编程将片段添加到导航抽屉中,然后从右侧打开抽屉。注意,我无法直接访问抽屉布局的xml文件,因此需要一个编程解决方案。抽屉从右侧打开并正确关闭,我保留抽屉的打开/关闭状态,并在配置根据该状态更改后打开它。 问题是,在配置更改时,抽屉关闭(我可以看到抽屉动画到关闭状态),即使我根据保存的InstanceState布尔值恢复其打开/关闭状态。我在中的所有方法中放置了调试器,但它们没有
我的应用程序有一个导航抽屉。从抽屉选项,我正在打开不同的活动。此时,在新活动之前显示一个空白屏幕。
有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:
按预期实现和工作,因此确实没有代码值得在这里发布,只是想看看是否有人有加快抽屉打开和关闭时间的经验?例如,YouTube应用程序要快得多!
我在将与和组合时遇到布局问题。 问题是,NavigationDrawer及其内容隐藏在工具栏后面。我已经做了很多研究,尝试了很多重组,但没有一个“解决方案”能解决我的问题。 在这个Webm小视频中可以找到一个演示:https://www.dropbox.com/s/i5zfc2x2ts2fws7/navigation_drawer_stackoverflow32523188.webm?dl=0 基
有人知道如何实现一个滑动菜单像一些顶级应用程序今天吗? 其他堆栈溢出问题还没有关于如何做到这一点的答案,所以我正在尝试收集尽可能多的信息来帮助其他人。我在下面提到的所有应用程序都很好地实现了幻灯片菜单。 只有点击左上角的G+标识,才能从第一屏进入第二屏。注意,整个屏幕从它的位置移动,并且get被推到屏幕的右侧(包括操作栏)。要回到第一个屏幕,您可以将右侧滑回焦点,也可以再次单击G+图标。 您可以使