导航抽屉不关闭

时间:2014-01-20 12:18:19

标签: android android-navigation

我的应用中的导航抽屉没有关闭。我正在使用活动而不是碎片。当我点击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>

11 个答案:

答案 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

希望有所帮助