当单击导航抽屉列表中的项目时,我试图关闭导航抽屉。我有 2 个活动 A 和 B。以下代码对于 A 和 B 都是相同的:
final DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ListView mDrawerList = (ListView) findViewById(R.id.left_drawer);
// Set the list's click listener
mDrawerList.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
Intent intent = null;
// first just close the drawer
mDrawerLayout.closeDrawers();
if (position == 0) { // Activity A
intent = new Intent(v.getContext(), ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
else if (position == 1) { // Activity B
intent = new Intent(v.getContext(), Activity B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
}
});
我想要做的是,当用户离开活动时关闭导航抽屉,这样当他回来时,抽屉就会关闭并且不会保持打开状态。
然而,上面的代码不起作用:
我尝试做一些日志记录:
/** Called when a drawer has settled in a completely closed state. */
@Override
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
Log.i("foo", "drawer closing");
}
/** Called when a drawer has settled in a completely open state. */
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Log.i("foo", "drawer opening");
}
我发现:
我觉得这很奇怪,所以我认为这可能是一个时间问题。所以我试着在打电话后等待1秒closeDrawers()
在做其他事情之前(即改变活动):
// Set the list's click listener
mDrawerList.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, final View v, final int position, long arg3) {
// first just close the drawer
mDrawerLayout.closeDrawers();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = null;
if (position == 0) { // Activity A
intent = new Intent(v.getContext(), ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
else if (position == 1) { // Activity B
intent = new Intent(v.getContext(), ActivityB.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
}
}, 1000);
}
});
果然,抽屉成功关上。
我的问题是:
- 为什么会发生这种情况?我认为它们(关闭抽屉、更改活动)都按顺序在同一个线程上运行,因此一个必须在另一个线程执行之前完成?
- 如何确保导航抽屉在执行其他操作之前关闭?