RecyclerView не показывает список элементов - PullRequest
0 голосов
/ 07 января 2020

я столкнулся с проблемой. Я пытаюсь использовать Адаптер RecyclerView +, но он не покажет мне мой список.

RecyclerView:

<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            android:scrollbars="vertical"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:listitem="@layout/item" />

Элемент:

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <import type="puc.apps.omcr.ui.common.item.BindingConverter" />

        <import type="puc.apps.omcr.core.util.SkuUtil" />

        <import type="android.view.View" />

        <variable
            name="item"
            type="puc.apps.omcr.api.item.ItemDTO" />

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintlayout_fragmentanforderungenliste_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/fragment_background_invisiblestroke"
        android:elevation="10dp">

        <TextView
            android:id="@+id/textview_item_lblid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:text="@string/all_id_shortest_dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/textview_item_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:text="@{BindingConverter.idToString(item.id)}"
            app:layout_constraintBaseline_toBaselineOf="@id/textview_item_lblid"
            app:layout_constraintStart_toEndOf="@+id/textview_item_lblid" />


        <TextView
            android:id="@+id/textview_item_lblindex"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:text="@string/all_index_shortest_dp"
            app:layout_constraintStart_toEndOf="@+id/textview_item_id"
            app:layout_constraintTop_toTopOf="@+id/textview_item_id" />

        <TextView
            android:id="@+id/textview_item_index"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:text="@{BindingConverter.indexToString(item.index)}"
            app:layout_constraintBaseline_toBaselineOf="@id/textview_item_lblindex"
            app:layout_constraintStart_toEndOf="@+id/textview_item_lblindex" />

        <TextView
            android:id="@+id/textview_item_lbldate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:text="@string/all_date_dp"
            app:layout_constraintStart_toEndOf="@+id/textview_item_index"
            app:layout_constraintTop_toTopOf="@+id/textview_item_index" />

        <TextView
            android:id="@+id/textview_item_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:text="@{BindingConverter.dateToString(item.date)}"
            app:layout_constraintStart_toEndOf="@+id/textview_item_lbldate"
            app:layout_constraintTop_toTopOf="@+id/textview_item_lbldate" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

Адаптер:

public class ItemAdapter extends DataBoundListAdapter<ItemDTO, ItemBinding> {

    private String baseWawiUrl;
    private ItemDTOClickCallback itemDTOClickCallback;

    ItemAdapter(String baseWawiUrl, ItemDTOClickCallback itemDTOClickCallback) {
        this.baseWawiUrl = baseWawiUrl;
        this.itemDTOClickCallback = itemDTOClickCallback;
    }

    @Override
    protected ItemBinding createBinding(ViewGroup parent) {
        ItemBinding binding = ItemBinding.inflate(LayoutInflater.from(parent.getContext()),
                parent, false);
        // Auf Auswahl eines Items reagieren
        binding.getRoot().setOnClickListener(v -> {
            ItemDTO itemDTO = binding.getItem();
            if (itemDTO != null && itemDTOClickCallback != null) {
                itemDTOClickCallback.onClick(itemDTO);
            }
        });
        return binding;
    }

    @Override
    protected void bind(ItemBinding binding, ItemDTO item) {
        binding.setItem(item);
    }

    @Override
    protected boolean areItemsTheSame(ItemDTO oldItem, ItemDTO newItem) {
        return Objects.equals(oldItem.getId(), newItem.getId());
    }

    @Override
    protected boolean areContentsTheSame(ItemDTO oldItem, ItemDTO newItem) {
        return Objects.equals(oldItem.getIndex(), newItem.getIndex());
    }

    public interface ItemDTOClickCallback {
        void onClick(ItemDTO itemDTO);
    }

}

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

public class ItemListViewModel extends AbstractFragmentViewModel {

    private MutableLiveData<List<ItemDTO>> itemDtos = new MutableLiveData<>();
    private MutableLiveData<Event<ItemDTO>> selectedItemDtos = new MutableLiveData<>();
    private int counter = 0;

    @Inject
    ItemListViewModel() {
        createArtikel();
    }

    public MutableLiveData<List<ItemDTO>> getItemDtos() {
        return itemDtos;
    }


    public void setItemDtos(List<ItemDTO> itemDtos) {
        this.itemDtos.setValue(itemDtos);
    }

    public MutableLiveData<Event<ItemDTO>> getSelectedItemDtos() {
        return selectedItemDtos;
    }

    public void setSelectedItemDtos(ItemDTO selectedItemDtos) {
        this.selectedItemDtos.setValue(new Event<>(selectedItemDtos));
    }

    public void createArtikel() {
        List<ItemDTO> list = new ArrayList<>();
        list.add(generateItem());
        list.add(generateItem());
        list.add(generateItem());
        list.add(generateItem());
        list.add(generateItem());
        list.add(generateItem());
        list.add(generateItem());
        list.add(generateItem());
        list.add(generateItem());
        setItemDtos(list);
    }

    private ItemDTO generateItem() {
        ItemDTO cur = new ItemDTO();
        cur.setId(counter);
        cur.setIndex(counter);
        cur.setDate(Calendar.getInstance().getTime());
        counter++;
        return cur;
    }

}

Я пытался заглянуть в Stacktrace, но, к сожалению, ошибки нет. Я также попытался отладить и посмотреть, передает ли он нулевой объект, но это не так.

...