#android #listview #drawerlayout
#Android #listview #drawerlayout
Вопрос:
Есть активность с ListView и навигационным ящиком, который, к сожалению, перекрывает мой ListView, и я не могу взаимодействовать с ним, например, ‘onItemSelected’.
Но
Всякий раз, когда я меняю DrawerLayout, чтобы он не охватывал всю активность, а только небольшую часть, .
Ниже мой код макета:
<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 между другими компонентами.