После включения Относительного макета в Параметры макета ящика в меню не реагируют на нажатия - PullRequest
0 голосов
/ 02 октября 2018

Я создал навигационный ящик по несколько действий .В XML у меня есть макет ящика .Перед включением в него относительного (или другого) макета, опции в меню можно было нажимать (переходя к другим действиям).Однако после включения макета он перестал переходить к другим действиям (параметры не активируются).

  <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:clickable="true"
        android:focusable="true"
        tools:openDrawer="start">

        <include
            layout="@layout/app_bar_main2"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            android:clickable="true"
            android:focusable="true"
            app:headerLayout="@layout/nav_header_main2"
            app:menu="@menu/activity_main2_drawer" />
        <include
            layout="@layout/main2_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </android.support.v4.widget.DrawerLayout>

И код для Main2Activity:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        //here is the main place where we need to work on.
        int id=item.getItemId();
        switch (id) {

            case R.id.nav_camera:
                Intent h = new Intent(Main2Activity.this, Main2Activity.class);
                startActivity(h);
                break;
            case R.id.nav_gallery:
                Intent g = new Intent(Main2Activity.this, Settings.class);
                startActivity(g);
                break;
            case R.id.nav_slideshow:
                Intent s = new Intent(Main2Activity.this, Allergy2.class);
                startActivity(s);
                break;
            case R.id.nav_manage:
                Intent t = new Intent(Main2Activity.this, Instruction.class);
                startActivity(t);
                break;

        }

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Вероятно, здесь происходит то, что ваш ящик скрывается за дополнительными детьми, которых вы создали в DrawerLayout.

Чтобы исправить это, в методе onCreate вашего Main2Activity, получитессылка на ваш NavigationView и вывести его на передний план:

NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.bringToFront();
0 голосов
/ 02 октября 2018

Если вы добавили CoordinatorLayout, а затем внутри -> AppBarLayout как дочерний в app_bar_main2 с Toolbar, то вам лучше добавить свое содержимое внутри CoordinatorLayout или, возможно, внутри NestedScrollView, который является потомком CoordinatorLayout.

Проблема, по которой они не активируются, заключается в том, что DrawerLayout не может распознать этот макет как его дочерний элемент:

<include
  layout="@layout/main2_image"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />

Итакпоместите содержимое этого макета внутрь CoordinatorLayout, и это дочерний элемент NestedScrollView.

0 голосов
/ 02 октября 2018

Почему бы не использовать Фрагменты вместо Действия !!

Чтобы убрать вопрос, вы сказали, что хотите переключаться между несколькими действиями, и эти все действия имеюттот же NavigationDrawer Layout!

Если да, это очень плохая практика ... вы можете использовать Фрагменты вместо каждого действия, которое вы создали в NavDrawerMenu ... TODO, которое следует за мной:

Сначала вы создадите MainActivity с блоком навигации как обычно, затем в методе onNavigationItemSelected здесь вы начнете транзакции между фрагментами вместо Intent следующим образом:

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    //here is the main place where we need to work on.
    int id=item.getItemId();
    switch (id) {
        case R.id.nav_camera:
            getFragmentManager().beginTransaction()
                        .replace(R.id.main_frameLayout, new 
                                       BlankFragment1()).commit();
            break;
        case R.id.nav_gallery:
            getFragmentManager().beginTransaction()
                        .replace(R.id.main_frameLayout, new 
                 BlankFragment2()).commit();
            break;
        case R.id.nav_slideshow:
            getFragmentManager().beginTransaction()
                        .replace(R.id.main_frameLayout, new 
                  BlankFragment3()).commit();
            break;
    }

ПРИМЕЧАНИЕ: вы точно знаете, что эти фрагменты должны быть дочерними для действия, поэтому main_frameLayout является id из FrameLayout, что фрагментыпомещаются в действие, в которое вы поместили NavigationDrawer, в котором выполняется MainActivity, следующим образом:

app_bar_nav_drawer.xml

    <android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context="com.tkmsoft.taahel.activities.MainActivity">

       <android.support.design.widget.AppBarLayout
         android:id="@+id/appBarLayout"
    android:layout_width="0dp"
    android:layout_height="?android:actionBarSize"
    android:theme="@style/AppTheme.AppBarOverlay"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/main_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorAccent"
        app:popupTheme="@style/AppTheme.PopupOverlay">

            <TextView
                android:id="@+id/toolbar_title"
                style="@style/TextAppearance.Widget.AppCompat.Toolbar.Title"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentStart="true"
                android:layout_toStartOf="@+id/toolbar_filter_button"
                android:gravity="center|start"
                android:textColor="@android:color/white" />
     </android.support.v7.widget.Toolbar>

          </android.support.design.widget.AppBarLayout>
    <FrameLayout
        android:id="@+id/main_frameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

                 </android.support.constraint.ConstraintLayout>
               </android.support.constraint.ConstraintLayout>
...