我已经多次实现了RecyclerView和客户适配器,但是由于某种原因,我无法使它显示任何数据。我正在使用翻新从JSON中输入数据,并在加载后调用notifyDataSetChanged(),但仍然保持空白。我将其剥离为仅一种文本视图以尝试简化,但仍然没有得到任何结果。谁能看到我在哪里出问题了?
当我调试时,我得到的列表中包含数据,所以我绝对可以正确地解析数据,只是无法使其显示在回收者视图中。我什至在loadTrailerList方法中检查了list.size(),它具有数据。
我的活动onCreate方法:
trailerAdapter = new TrailerAdapter(this);
trailerRecyclerView = findViewById(R.id.trailer_recycler_view);
trailerRecyclerView.setLayoutManager(new LinearLayoutManager(this));
trailerRecyclerView.setAdapter(trailerAdapter);
改造响应方法:
if (response.body() != null) {
trailers = response.body().getTrailers();
}
trailerAdapter.loadTrailerList(response.body().getTrailers());
我的自定义适配器:
public class TrailerAdapter extends RecyclerView.Adapter<TrailerAdapter.TrailerViewHolder> {
private final List<Trailer> trailerList = new ArrayList<>();
private final TrailerClickListener listener;
public TrailerAdapter(TrailerClickListener listener) {
this.listener = listener;
}
@NonNull
@Override
public TrailerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.trailer_list_item, viewGroup, false);
return new TrailerViewHolder(itemView, this);
}
@Override
public void onBindViewHolder(@NonNull TrailerViewHolder trailerViewHolder, int i) {
trailerViewHolder.trailerTitle.setText(trailerList.get(i).getName());
}
@Override
public int getItemCount() {
return trailerList.size();
}
public void loadTrailerList(List<Trailer> trailers) {
this.trailerList.clear();
if (trailers != null) {
trailers.addAll(trailers);
}
notifyDataSetChanged();
}
class TrailerViewHolder extends RecyclerView.ViewHolder {
final TrailerAdapter trailerAdapter;
private final TextView trailerTitle;
private TrailerViewHolder(@NonNull View itemView, TrailerAdapter trailerAdapter) {
super(itemView);
this.trailerAdapter = trailerAdapter;
trailerTitle = itemView.findViewById(R.id.text_view_trailer_title);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onTrailerClicked(trailerList.get(getAdapterPosition()));
}
});
}
}
}
我的列表项XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_view_trailer_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Play Trailer" />
</LinearLayout>
我的活动XML中的回收者视图:
<android.support.v7.widget.RecyclerView
android:id="@+id/trailer_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:layout_constraintTop_toBottomOf="@+id/trailer_divider">
</android.support.v7.widget.RecyclerView>
我感谢任何能将我指向正确方向的人
答案 0 :(得分:1)
这是因为您要向适配器发送列表,但是没有初始化适配器中使用的列表。
尝试一下。
public void loadTrailerList(List<Trailer> trailers) {
this.trailerList.clear();
if (trailers != null) {
trailerList = trailers;
}
notifyDataSetChanged();
}
答案 1 :(得分:0)
Do!我只是意识到自己在做什么错了:
在适配器的loadTrailerList()方法中,我正在调用:
trailers.addAll(trailers);
代替:
trailerList.addAll(trailers);
将项目列表加载到实际的ArrayList中!哎呀!