我正在使用导航抽屉功能,正常工作,但在点击一项后关闭速度较慢。如果下一个活动在oncreate方法中有额外的代码,则会出现此问题,否则可以正常使用。
请帮助解决此问题。
请帮助解决此问题。
我刚刚成功解决了你遇到的问题。
首先,我要说的是我正在使用 Android Studio 1.1.0 生成的 NavigationDrawer 项目。
下面是 NavigationDrawerFragment 类中的 onCreateView() 方法。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
mDrawerListView = (ListView) inflater.inflate(
R.layout.fragment_navigation_drawer, container, false);
mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
selectItem(position);
}
});
mDrawerListView.setAdapter(new ArrayAdapter<String>(
getActionBar().getThemedContext(),
android.R.layout.simple_list_item_activated_1,
android.R.id.text1,
new String[]{
getString(R.string.title_section1),
getString(R.string.title_section2),
getString(R.string.title_section3),
}));
mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
return mDrawerListView;
}
当点击Item时,
mDrawerListView.setOnItemClickListener()
回调函数将被触发并且控制权将传递给
selectItem(position)
方法。
"selectItem()"方法会隐藏导航抽屉,并使用回调调用"MainActivity"类中的一个方法-onNavigationDrawerItemSelected(),该方法启动切换到所选片段的过渡。
动画卡顿/延迟是由于代码尝试同时关闭导航抽屉和完成UI布局工作。
如果您想避免延迟,您必须选择先执行哪个任务。
在我的解决方案中,我决定:
这是我的解决方案:
mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
final int pos = position;
mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener(){
@Override
public void onDrawerClosed(View drawerView)
{
super.onDrawerClosed(drawerView);
selectItem(pos);
}
});
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
});
不要被代码搞混了。
我们将selectItem(pos)放在一个回调函数中,该回调函数仅在抽屉关闭时触发,然后我们强制关闭抽屉,以便魔法发生。
这个解决方案对我有用,希望知道它是否也适用于你。
displayView()
中,你可以从抽屉中获取所选项目,因此你可以指定mDrawerLayout
的重力方向。 private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
//load your fragment here
mDrawerLayout.closeDrawer(Gravity.LEFT);
break;
}
在您的项目点击事件中,您需要关闭抽屉布局
drawlayout = (DrawerLayout) findViewById(R.id.drawer_layout);
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment = new EventFragment();
break;
case 2:
fragment = new SponsorsFragment();
break;
case 3:
fragment = new AboutFragment();
break;
case 4:
fragment = new OurTeamFragment();
break;
case 5:
fragment = new VideoFragment();
break;
case 6:
fragment = new ContactFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentTransaction ft = getSupportFragmentManager()
.beginTransaction();
ft.setCustomAnimations(android.R.anim.slide_in_left,
android.R.anim.slide_out_right);
ft.replace(R.id.content_frame, fragment);
ft.commit();
// pushFragments(fragment, true, true);
drawlayout.closeDrawers();
}
}
有 closeDrawer(View view) 和 closerDrawer(int gravity) 两个方法。 在你的项目点击事件中, 可以使用 .closeDrawer(Gravity.START); 来关闭抽屉。
对我来说,这些方法都很有效。它们也可能对你有帮助。