Как открыть навигационный ящик нажатием кнопки в главном фрагменте?

Я создал приложение с одним действием, которое использует ящик навигации, чтобы открыть несколько разных фрагментов. У меня есть actionbar drawertoggle, но это не очень заметно. Если я помещаю кнопку в onCreateView в свой основной фрагмент (фрагмент, который появляется, когда мое приложение запускается первым), как я могу заставить его открыть ящик навигации, контролируемый моей деятельностью?


Это похоже на работу. Ответ намного проще, чем я думал, что это будет.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View fragView = inflater.inflate(R.layout.mainmenu, container, false);
    button1 = (Button) fragView.findViewById(R.id.button1);         
    mDrawerLayout = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)getActivity().findViewById(R.id.left_drawer);
    button1.setOnClickListener(this);
    return fragView;
}


@Override
public void onClick(View v) {       

        mDrawerLayout.openDrawer(mDrawerList);          

    }

Спасибо за ваши ответы.

Ответ 1

если вам нужно открыть слайд:

mDrawerLayout.openDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

если вам нужно закрыть слайд

mDrawerLayout.closeDrawer(Gravity.LEFT); //Edit Gravity.START need API 14
Пример

EXAMPLE

мой mDrawerLayout приведен здесь:

mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);

мое состояние слайда:

mSlideState=false;

если вам нужно знать состояние слайд-меню (закрыто, открыто). Используйте этот код:

mDrawerLayout.setDrawerListener(new ActionBarDrawerToggle(this, 
    mDrawerLayout, 
    R.drawable.ic_menu_slide,
    0,
    0){
@Override
public void onDrawerClosed(View drawerView) {                       
    super.onDrawerClosed(drawerView);
    mSlideState=false;//is Closed
}
@Override
public void onDrawerOpened(View drawerView) {                       
    super.onDrawerOpened(drawerView);
    mSlideState=true;//is Opened
}});

наконец. Вы можете использовать событие клика следующим образом:

public void clickEventSlide(){
if(mSlideState){                
    mDrawerLayout.closeDrawer(Gravity.END);
}else{              
    mDrawerLayout.openDrawer(Gravity.END);
}}

В моем случае мое слайд-меню находится справа (Gravity.END), но если вам это нужно слева, попробуйте с Gravity.START

Ответ 2

У меня есть гораздо более простое решение, используя isDrawerOpen().

Это автоматически закрывает или открывает ящик навигации в зависимости от текущего состояния ящика (Открыто/Закрыто)

    Button hamMenu = findViewById(R.id.ham_menu);

    hamMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DrawerLayout navDrawer = findViewById(R.id.drawer_layout);
            // If the navigation drawer is not open then open it, if its already open then close it.
            if(!navDrawer.isDrawerOpen(Gravity.START)) navDrawer.openDrawer(Gravity.START);
            else navDrawer.closeDrawer(Gravity.END);
        }
    });

Ответ 3

если вы используете навигационную активность по умолчанию в android, вам просто нужно добавьте этот код в нажатие кнопки кнопки --- >

mDrawerLayout.openDrawer(Gravity.START);

для закрытия вам ничего не нужно делать.

Ответ 4

Чтобы применить панель инструментов в качестве панели приложения, сначала убедитесь, что ваша деятельность выходит за пределы AppCompatActivity. Затем вызовите setSupportActionBar() и передайте объект панели инструментов из вашего макета:

    toolbar=(Toolbar) findViewById(R.id.toolbar_main);
    setSupportActionBar(toolbar);
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp);

    drawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,R.string.navigation_drawer_open,
            R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    if (drawerLayout.isDrawerOpen(GravityCompat.START)){
        drawerLayout.closeDrawer(GravityCompat.START);
    }
    else{
        super.onBackPressed();
    }
}

}

Ответ 6

Используйте эти строки, чтобы открыть и закрыть ящик для определенного события:

Фрагмент кода для открытия ящика:

drawerLayout.openDrawer(Gravity.START);

Фрагмент кода для закрытия ящика:

drawerLayout.closeDrawer(Gravity.LEFT);

openDrawer(gravity_of_navigation_view_to_be_shown)

в openDrawer ("gravity"), в разделе "gravity", вы должны ввести гравитацию навигационного вида, как указано выше:

Gravity.LEFT
Gravity.RIGHT
Gravity.START
Gravity.END

Я думаю, что это лучший ответ.