Android DrawerLayout накладывает фоновый ListView

#android #listview #drawerlayout

#Android #listview #drawerlayout

Вопрос:

Есть активность с ListView и навигационным ящиком, который, к сожалению, перекрывает мой ListView, и я не могу взаимодействовать с ним, например, ‘onItemSelected’.

Вот как это выглядит:

Но

Всякий раз, когда я меняю DrawerLayout, чтобы он не охватывал всю активность, а только небольшую часть, .

onitemSelect работает

Ниже мой код макета:

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="marcin.chruscicki.notefication.MainActivity"
        android:background="@color/universalBackground_DarkGray">

        ...

     <ListView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@ id/notesListView"
        android:stackFromBottom="false"
        android:layout_alignParentStart="true"
        android:layout_above="@ id/versionTxtView" />


     <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@ id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        >
        <!-- The main content view -->
        <FrameLayout
            android:id="@ id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <!-- The navigation drawer -->
        <ListView android:id="@ id/left_drawer"
            android:layout_width="140dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#262626" />

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

        ...

    </RelativeLayout>
  

Я нигде не могу найти ответ, и я уверен, что это просто исправить.

Комментарии:

1. какой listview не работает??

2. В DrawerLayout все работает нормально. Проблема связана с ListView, который находится за пределами DrawerLayout (id = «notesListView»).

Ответ №1:

Причина, по которой ваш просмотр списка не работает, заключается в том, что вы разместили его в нижнем слое, а поверх него вы разместили ящик, поэтому ящик находится над listview, а для ящика установлено значение match_parent

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="marcin.chruscicki.notefication.MainActivity"
    android:background="@color/universalBackground_DarkGray">

    ...

 <android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    >
    <!-- The main content view -->
   <android.support.design.widget.NavigationView
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:id="@ id/nav"/> 

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

    ...


<ListView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@ id/notesListView"
    android:stackFromBottom="false"
    android:layout_alignParentStart="true"
    android:layout_above="@ id/versionTxtView" />

</RelativeLayout>
  

попробуйте расположить представление списка следующим образом: когда вы создаете элемент в макете, он переходит один за другим, что означает, что последний элемент, который вы размещаете, будет впереди
, вам нужно сделать навигационный ящик listviw в макете фрагмента.Вот полный пример того, как вы можете сделать пример фрагмента. надеюсь, это вам поможет.Попробуйте сделать фрагмент для навигационного ящика простым.

Комментарии:

1. Он работает почти нормально, за исключением того, что теперь весь DrawerLayout находится за ListView. Скриншот: s12.postimg.org/kb4b2nzrh/stck.png

2. Я думаю, что я все сделал правильно из этого урока, но конечный эффект такой же, как и раньше. : ( Есть взаимодействие с макетом ящика, но не с элементами ListView. s17.postimg.org/twrwp01db/stc.png

3. Да, но вы также можете использовать навигационный ящик таким образом

Ответ №2:

Я думаю, что я только что нашел решение / обходной путь для моей проблемы. Вместо того, чтобы размещать макет ящика между другими компонентами, такими как TextView или ListView, я использовал учебник, связанный @neelay-srivastava, и создал новый класс макет с одним DrawerLayout внутри. Затем изменил все мои действия на фрагменты. И это работает.

Для будущих пользователей с такой же проблемой просто не забудьте не вставлять DrawerLayout в другой макет activity между другими компонентами.