我有一个导航抽屉的问题,它太慢了,我正在寻找的解决方案是关闭抽屉,然后显示活动,但它不工作,当然我错过了一些东西。
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int posicao, long id) {
setLastPosition(posicao);
setFragmentList(lastPosition);
layoutDrawer.closeDrawer(linearDrawer);
}
}
private OnClickListener userOnClick = new OnClickListener() {
@Override
public void onClick(View v) {
layoutDrawer.closeDrawer(linearDrawer);
}
};
private void setFragmentList(int posicao) {
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = new FragmentViagens();
switch (posicao) {
case 0:
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
break;
case 1:
fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentPedidos()).commit();
break;
case 2:
fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentClientes()).commit();
break;
}
navigationAdapter.setChecked(posicao, true);
setTitleFragments(lastPosition);
navigationAdapter.resetarCheck();
layoutDrawer.closeDrawer(linearDrawer);
}
我想我已经找到了最好的解决方案!
首先像这样做你的碎片交易:
new Handler().post(new Runnable() {
@Override
public void run() {
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
.replace(R.id.container, finalMenuFragment)
.commit();
}
});
我知道发布Runnable看起来没什么用,但这种破解方法避免了抽屉上点击动画的延迟,尤其是当你使用android:background=“?attr/selectableitemsbackground”作为可点击元素时。
然后在片段的onResume()函数末尾关闭抽屉(在本例中为“finalMenuFragment”),如下所示:
new Handler().post(new Runnable() {
public void run() {
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
});
再一次,我知道发布Runnable看起来很愚蠢,但它可以使关闭的动画平滑。
这样,如果您想要平滑的动画,抽屉将尽可能快地关闭,如果您的片段中没有太多视图,抽屉将更快地关闭,并且仍然没有延迟。
如果有人测试了这个解决方案,我想得到一些反馈,希望能有所帮助!
与其在onClick中进行交易,为什么不在onDrawerClosed from DrawerLayout中进行呢。DroperListener?
您可以这样做以避免抽屉延迟,更改您的onItemClick:
layoutDrawer.closeDrawer(linearDrawer);
setLastPosition(posicao);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
setFragmentList(lastPosition);
}
}, 200);
编辑:首选方法应该是在抽屉布局上设置抽屉链接器,并在绘图关闭中设置片段,如下所示:
Fragment mFragmentToSet = null;
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// Handle navigation view item clicks here.
switch (item.getItemId()) {
case R.id.nav_home:
mFragmentToSet = HomeFragment.newInstance();
break;
}
mDrawerLayout.closeDrawer(GravityCompat.START);
return true;
}
mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override public void onDrawerSlide(View drawerView, float slideOffset) {}
@Override public void onDrawerOpened(View drawerView) {}
@Override public void onDrawerStateChanged(int newState) {}
@Override
public void onDrawerClosed(View drawerView) {
//Set your new fragment here
if (mFragmentToSet != null) {
getSupportFragmentManager()
.beginTransaction()
.replace(FRAGMENT_CONTAINER_ID, mFragmentToSet)
.commit();
mFragmentToSet = null;
}
}
});
我所拥有的 我有一个导航抽屉和一个浏览寻呼机。查看寻呼机有5个片段。我在视图页面的每个片段中放置了一个图像视图。 问题 我看到,每当我将图像视图放在片段中并尝试打开导航抽屉时,动画都非常缓慢和滞后。即使我试着把它关上,它也非常滞后。 但是,如果我删除ImageView,则导航像往常一样平滑。 我需要放置ImageView,因为它非常重要。请给出一些解决方案,如我如何打开导航抽屉
有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:
问题内容: 我在使用Navigation Drawer时遇到问题,它太慢了,我要寻找的解决方案是先关闭抽屉,然后显示活动,但它不起作用,肯定是我遗漏了一些东西。 问题答案: 您可以通过这种方式来避免抽屉滞后,更改 onItemClick : 编辑: 首选方式应该是在DrawerLayout上设置DrawerListener,然后 像这样设置片段:
我正在将我的应用程序更新为导航架构组件,我发现它在替换导航抽屉中可见的片段时存在延迟,无法顺利关闭。 直到现在,我一直在遵循这种方法: https://vikrammnit.wordpress.com/2016/03/28/facing-navigation-drawer-item-onclick-lag/ 所以我在中导航而不是在中导航以避免故障。 这是一个非常常见的问题,但它又回来了。使用导航组
我是android新手。我有一个关于Android导航抽屉的问题。我在我的应用程序中加入了导航抽屉,一切都很顺利,但我想知道是否有人能帮我在导航抽屉列表中获得惰性动画。 图像的来源。 非常感谢。
问题内容: 有没有一种方法可以只配置一次导航抽屉,并在多个Activites上显示它? 问题答案: 为此,只需创建一个实现抽屉的BaseActivity类,然后让所有其他活动扩展该抽屉即可。