Ящик навигации не закрывается

Ящик навигации в моем приложении не закрывается. Я использую действия вместо фрагментов. Когда я нажимаю на любой элемент в 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>

Ответ 1

Вы пробовали:

mDrawerLayout.closeDrawer(drawerListView);

Вы можете добавить это перед вызовом startActivity()

Ответ 2

В продолжении ответов других и @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

Ответ 3

Вызов

drawer.closeDrawer(navList);

в onItemClick() метод

Ответ 4

Попробуйте

drawer.closeDrawer(Gravity.START);

Тяжесть drawer start равна start, поэтому используйте это, чтобы закрыть соответствующий drawer

Ответ 5

Я не видел никакого кода, в котором вы закрываете 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;
            }
        }
    });

Ответ 6

Вам нужно закрыть ящик в элементе списка, нажав

drawer.closeDrawer(navList);

Также используется FrameLayout в вашем xml. Он не используется в качестве контейнера для добавления или замены фрагментов.

Ответ 7

вызвать drawer.closeDrawer(navList); функция перед корпусом выключателя

Ответ 8

использовать

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


}

Ответ 9

У меня была такая же проблема.

Я использовал

mDrawerLayout.closeDrawer(drawerListView);

перед тем, как начать новую работу. Он красиво выдвигает ящик.

Ответ 10

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

работает

Ответ 11

Вот код: Допустим, у вас класс ящиков

в вашей деятельности вызовите класс as и сделайте vaiable и назначьте его (поместите макет ящика в фрагмент для более гладкого пользовательского интерфейса)

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

Надеюсь, что это поможет