я столкнулся с проблемой. Я пытаюсь использовать Адаптер 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, но, к сожалению, ошибки нет. Я также попытался отладить и посмотреть, передает ли он нулевой объект, но это не так.