11

我的应用程序中的导航抽屉没有关闭。我正在使用活动而不是片段。当我单击 中的任何项目时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>
4

11 回答 11

7

你有没有尝试过 :

mDrawerLayout.closeDrawer(drawerListView);

您可以在调用之前添加它startActivity()

于 2014-01-20T12:31:04.817 回答
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;
}
}

希望这可以帮助!

我建议您使用 Fragments 作为导航抽屉并解决抽屉无法正常关闭的问题,我发现这篇文章非常有用(使用 Fragments)。http://www.michenux.net/android-asynctask-in-fragment-best-pratices-725.html

于 2014-01-20T12:57:08.667 回答
4

尝试

drawer.closeDrawer(Gravity.START);

你的drawer重力就是start这么用那个来关闭对应的drawer

于 2014-01-20T12:22:15.400 回答
4

称呼

drawer.closeDrawer(navList);

onItemClick()方法中

于 2014-01-20T12:21:04.467 回答
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;
            }
        }
    });
于 2014-01-20T12:23:17.230 回答
2

调用抽屉.closeDrawer(navList); 开关盒前的功能

于 2014-01-20T12:22:41.823 回答
2

您需要在列表项单击时关闭抽屉

drawer.closeDrawer(navList);

还有什么FrameLayout在你的xml中使用。它不用作添加或替换片段的容器

于 2014-01-20T12:20:57.247 回答
1

我遇到了同样的问题。

我用了

mDrawerLayout.closeDrawer(drawerListView);

在开始我的新活动之前。它精美地将抽屉滑回。

于 2014-09-25T13:01:31.663 回答
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


}
于 2014-03-18T11:24:52.663 回答
1
private DrawerLayout mDrawerLayout;
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.closeDrawers();

有用

于 2016-03-22T09:30:13.770 回答
0

这是代码:假设您有抽屉类

在您的活动中调用该类并创建一个变量并分配它(将抽屉布局放在片段中以获得更流畅的用户体验)

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

希望能帮助到你

于 2015-04-11T13:19:20.173 回答