我的应用中的导航抽屉没有关闭。我正在使用活动而不是碎片。当我点击listview
中的任何项目时,它会打开其他活动,但是当我回去时,抽屉仍处于打开状态。我尝试过使用DrawerLayout.closeDrawers();
但它没有用。如何关闭导航抽屉?
这是我的代码:
爪哇
public class MainActivity extends FragmentActivity {
final String[] data ={"Aluminium","Gold","Zinc"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
final ListView navList = (ListView) findViewById(R.id.left_drawer);
navList.setAdapter(adapter);
navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){
switch (pos){
case 0:
Intent i = new Intent(MainActivity.this,Aluminium.class);
startActivity(i);
break;
case 1:
Intent i2 = new Intent(MainActivity.this,Gold.class);
startActivity(i2);
break;
case 2:
Intent i3 = new Intent(MainActivity.this,Zinc.class);
startActivity(i3);
break;
}
}
});
}
}
XML
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:background="#000000"
android:layout_height="match_parent" >
</FrameLayout>
<ListView android:id="@+id/left_drawer"
android:layout_width="220dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="1dp"
android:background="#000000"/>
</android.support.v4.widget.DrawerLayout>
答案 0 :(得分:6)
你试过了吗?
mDrawerLayout.closeDrawer(drawerListView);
您可以在致电startActivity()
答案 1 :(得分:5)
继续回答其他人的答案和@ Chinmay Dabke的问题'但抽屉关闭了一半,然后暂停,然后完全关闭'在其中一条评论中,这是你可以做的:
首先正如其他人所说,
这条线丢失了。 drawer.closeDrawer(navList);
就关闭时抽屉的暂停而言,你可以做这样的事情。 使用像这样的Runnable和Handler:
mRunnable = = new Runnable() {
@Override
public void run() {
//say
selectItem(pos); //Implement your switch case logic in this func
}
}
然后在onDrawerClosed
覆盖方法
@Override
public void onDrawerClosed(View view) {
if (mRunnable != null) {
mHandler.post(mRunnable);
mRunnable = null;
}
}
希望这有帮助!
我建议你使用碎片导航抽屉并解决这个抽屉没有正确关闭的问题,我发现这篇文章非常有用(使用片段)。 http://www.michenux.net/android-asynctask-in-fragment-best-pratices-725.html
答案 2 :(得分:4)
呼叫
drawer.closeDrawer(navList);
onItemClick()
方法中的
答案 3 :(得分:3)
尝试
drawer.closeDrawer(Gravity.START);
您的drawer
重力为start
因此请使用它来关闭相应的drawer
答案 4 :(得分:3)
我没有看到你从抽屉里关闭ListView的任何代码......关闭ListItem上的ListView抽屉点击...
navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){
drawer.closeDrawer(navList);
switch (pos){
case 0:
Intent i = new Intent(MainActivity.this,Aluminium.class);
startActivity(i);
break;
case 1:
Intent i2 = new Intent(MainActivity.this,Gold.class);
startActivity(i2);
break;
case 2:
Intent i3 = new Intent(MainActivity.this,Zinc.class);
startActivity(i3);
break;
}
}
});
答案 5 :(得分:2)
您需要关闭列表项目上的抽屉单击
drawer.closeDrawer(navList);
还有什么在{xml}中使用FrameLayout
。它不用作添加或替换片段的容器
答案 6 :(得分:2)
调用drawer.closeDrawer(navList);切换案例之前的功能
答案 7 :(得分:1)
使用
if(drawer.isDrawerOpen(navList))
{
drawer.closeDrawer(navList);
}
在onResume()和onItemClick()方法的开始。
或者您可以尝试其他方法..当您选择抽屉项目时,运行Ui线程
private void selectDrawerItemItem(final int position){
//Toast.makeText(getApplicationContext(), "ItemClicked", Toast.LENGTH_SHORT).show();
darwer.closeDrawer(navList);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Fragment fragment = new Fragment(Activity.this);
Bundle args = new Bundle();
args.putInt(Fragment.ARG_PLANET_NUMBER, position);
fragment.setArguments(args);
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).commit();
// update selected item and title, then close the drawer
navList.setItemChecked(position, true);
setTitle(" " + navListTitles[position]);
}
}, 200);
// update the main content by replacing fragments
}
答案 8 :(得分:1)
我遇到了同样的问题。
我用过
mDrawerLayout.closeDrawer(drawerListView);
开始我的新活动之前。它精美地将抽屉滑回。
答案 9 :(得分:1)
private DrawerLayout mDrawerLayout;
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.closeDrawers();
它有效
答案 10 :(得分:0)
这是代码: 让我们说你有抽屉类
在您的活动中将该类调用为并制作一个可变的并分配它(将抽屉布局放在一个片段中以获得更流畅的用户体验)
Drawer drawer;
drawer = (Drawer)getActivity().getSupportFragmentManager().findFragmentById(R.id.theid);
drawer.mDrawerLayout.closeDrawer(Gravity.END);
//End for right and Start for left
希望有所帮助