Xamarin Android LinearLayout - Проблема с 2 RecyclerView на одной странице - PullRequest
2 голосов
/ 06 мая 2020

У меня проблемы с v7.widget.RecyclerView. У меня есть «сообщение» от пользователя приложения, в котором отображаются все изображения, которые они добавили ранее, а также любые другие вложения (документы, видео и т. Д. c.). Есть возможность редактировать существующие сообщения.

У меня есть файл EditPost xml, в который встроен файл с именем attachment_item. Это, в свою очередь, включает файл xml с именем EditAttachmentsLayout. При необходимости я могу опубликовать код из первых двух файлов, но не думаю, что проблема в этом.

Страница EditAttachmentsLayout использует 2 RecyclerViews; один для изображений, а другой для других файлов. Код находится здесь:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/edit_images_recycler"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <android.support.v7.widget.RecyclerView
        android:id="@+id/edit_attachments_recycler"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Проблема в том, что, когда переработчик вложений имеет элементы для отображения, он накладывает какой-то оверлей поверх первого (и только первого) изображения, например:

enter image description here

Если я нажму кнопку «Крестик» на миниатюре (или кнопку «крестик» на самом вложении), вложение будет удалено, а затем появится изображение в таком виде:

enter image description here

Это как если бы переработчик накладывал какой-то оверлей поверх первого изображения в списке. Я пробовал всевозможные вещи, чтобы решить эту проблему, например, добавлял интервал, чтобы попытаться принудительно разделить два ресайклера, и переключаться на GridView, как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" android:rowCount="4">
    <android.support.v7.widget.RecyclerView android:id="@+id/edit_images_recycler"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_row="0"
        android:scrollbars="none"/>
    <Space
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_row="1"
        android:layout_marginBottom="10dp"/>   
    <android.support.v7.widget.RecyclerView android:id="@+id/edit_attachments_recycler"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_row="2"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        android:scrollbars="none"/>
</GridLayout>

К сожалению, проблема не устранена. Изображение всегда закрыто, пока я не удалю вложение.

Есть идеи ...? Я в тупике. Итак, вот наложение, которое добавляет кнопку удаления к изображению, когда сообщение находится в режиме редактирования. Приносим извинения за то, что не включили его ранее, я не создавал это приложение, поэтому не знаю о нем всего:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_marginRight="20dp"
android:layout_width="@dimen/edit_image_size"
android:layout_height="@dimen/edit_image_size">
<ImageView
    android:background="@drawable/image_background"
    android:id="@+id/attachment_image"
    android:scaleType="fitXY"
    android:layout_width="@dimen/edit_image_size"
    android:layout_height="@dimen/edit_image_size"/>
<ImageButton
    android:background="@drawable/rounded_button_secondary"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:layout_alignTop="@id/attachment_image"
    android:layout_alignRight="@id/attachment_image"
    android:id="@+id/delete_attachment_button"
    android:src="@drawable/icon_of_cross"
    android:tint="@color/white"
    android:padding="5dp"
    android:layout_margin="5dp"
    android:layout_width="25dp"
    android:layout_height="25dp" />

Просто для некоторой ясности я добавил еще несколько скриншоты, с множеством изображений и вложений. Если в сообщении есть и изображения, и вложения, первое загружаемое изображение (крайнее правое) будет иметь оверлей:

enter image description here

Один раз Я нажимаю кнопку с крестиком, чтобы удалить первое вложение, вложение исчезло (как и ожидалось), и изображение снова отображается:

enter image description here

Очень странно!

1 Ответ

0 голосов
/ 15 мая 2020

Предложения: 1. Попробуйте установить высоту родительского линейного макета как match_parent

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"> // **this line here**
        <android.support.v7.widget.RecyclerView
            android:id="@+id/edit_images_recycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <android.support.v7.widget.RecyclerView
            android:id="@+id/edit_attachments_recycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

Пытались ли вы узнать, есть ли у вас проблемы с основным потоком? RunOnUIThread(() => {}) - для обновления адаптеров

Попробуйте уведомить адаптеры ресайклера об изменениях с помощью используя:

_editImageAdapter.NotifiyDatasetChanged () _editImageAdapter.NotifiyDatasetChanged ()

...