Tap*_*ave 4 java android android-fragments navigation-drawer
我在我的应用程序中尝试实现导航抽屉(Material Design).我的活动包含带有片段的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();
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击项目都工作正常.导航抽屉关闭不顺畅,但冻结(抽搐,抽搐)因为片段在后台重新加载.
导航抽屉有多接近顺畅?
您必须决定是否更喜欢:
替换Fragment
你FrameLayout
然后关闭DrawerLayout
要么
关闭DrawerLayout
然后更换你的Fragment
.
只需在代码中进行以下更改:
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
}
}
Run Code Online (Sandbox Code Playgroud)
在用户点击时设置某种标志:
listViewDrawer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mDrawerItemClicked = true;
drawerLayout.closeDrawer(listViewDrawer);
}
}
Run Code Online (Sandbox Code Playgroud)
并设置DrawerLayout.DrawerListener
在你的上面DrawerLayout
,像这样:
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) {
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2110 次 |
最近记录: |