2014-01-20 229 views
10

我的应用中的导航抽屉未关闭。我正在使用活动而不是碎片。当我点击listview中的任何项目时,它会打开其他应用程序,但当我返回时,抽屉仍处于打开状态。我曾尝试使用DrawerLayout.closeDrawers();,但它没有奏效。如何关闭导航抽屉?
这里是我的代码:
导航抽屉没有关闭

的Java

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

你可以显示你在哪里以及如何尝试drawer.closeDrwaer()? – FWeigl

回答

2

您需要关闭列表项抽屉点击

drawer.closeDrawer(navList); 

在你的xml中还有什么是FrameLayout的用法。它不是作为一个容器中onItemClick()方法

+0

我正在使用导航抽屉在活动 –

+0

@ChinmayDabke之间进行切换? – Raghunandan

+0

没有我刚才提到。不尊敬先生! –

4

呼叫

drawer.closeDrawer(navList); 

尝试

drawer.closeDrawer(Gravity.START);

drawer重力start所以请使用可到关闭相应的drawer

3

添加或更换片段

2

调用drawer.closeDrawer(navList);前开关罩功能

+0

谢谢Mohan!但它关闭了一半,然后暂停,然后完全关闭。我该怎么办? –

3

我没有看到你在哪里抽屉在关闭的ListView任何代码...关闭ListView的抽屉上的ListItem点击...

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; 
      } 
     } 
    }); 
+0

谢谢Gopal它的工作原理!但它会关闭一半然后暂停然后完全关闭。我该怎么办? –

+0

@ChinmayDabke在switch语句之后移动'drawer.closeDrawer(navList)'语句我的意思是在启动Activity之后... –

+0

我在之后写了,但它仍然暂停!请帮忙。 –

6

你尝试过:

mDrawerLayout.closeDrawer(drawerListView); 

您可以调用startActivity()

5

在延续别人的答案,@章之前添加此可能Dabke问题的'但抽屉关闭一半,然后暂停,然后完全关闭'在一个评论中,这是你可以做的:

首先像其他人建议的, 这条线缺失。 drawer.closeDrawer(navList);

只要关闭时关闭抽屉,您可以做这样的事情。 使用一个Runnable和处理程序是这样的:

mRunnable = = new Runnable() { 
    @Override 
    public void run() { 
     //say 
     selectItem(pos); //Implement your switch case logic in this func 
    } 
} 

然后在onDrawerClosed overrided方法

@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

+0

究竟应该在哪里添加您给出的代码? –

+0

我在onclick事件中放置了可运行的初始化,以便它可以从行中获取所需的内容。然后,droidx确实将帖子放入了onDrawerClosed。很好地修复了口吃。 –

1

使用

if(drawer.isDrawerOpen(navList)) 
    { 
     drawer.closeDrawer(navList);  
    } 

在的onResume()和onItemClick的start()方法。

,或者你可以尝试另一种approach..run一个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 


} 
1

我有同样的问题。

我开始我的新活动之前使用

mDrawerLayout.closeDrawer(drawerListView); 

。它优美滑动抽屉回

0

这里是代码: 可以说,你有抽屉类

在您的活动调用类作为,并作出vaiable并为其分配(内放抽屉布局片段流畅的用户体验)

Drawer drawer; 
drawer = (Drawer)getActivity().getSupportFragmentManager().findFragmentById(R.id.theid); 
drawer.mDrawerLayout.closeDrawer(Gravity.END); 
//End for right and Start for left 

希望它可以帮助

1
private DrawerLayout mDrawerLayout; 
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
mDrawerLayout.closeDrawers(); 

它的工作原理