android - RecyclerView 没有迭代布局
问题描述
我正在为我的 android 应用程序创建一个 RecyclerView,其中包含一些具有两组数据的虚拟数据。但是布局没有迭代两次,而是正确显示了第一个数据。
public class HomeScreenFragment extends Fragment {
private ArrayList<String> flags = new ArrayList<>();
private ArrayList<String> leagues = new ArrayList<>();
private ArrayList<String> dates = new ArrayList<>();
private Context context;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_home, container, false);
return root;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
initData();
}
private void initData() {
leagues.add("Indian premiere league");
dates.add("03-Dec");
leagues.add("Srilankan Premiere league");
dates.add("04-Dec");
initRecyclerView();
}
private void initRecyclerView() {
RecyclerView recyclerView = getView().findViewById(R.id.homeRecyclerView);
HomeScreenRVAdapter adapter = new HomeScreenRVAdapter(flags,leagues,dates,context);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
}
}
回收站视图
public class HomeScreenRVAdapter extends RecyclerView.Adapter<HomeScreenRVAdapter.ViewHolder> {
private static final String TAG = "HomeScreenRVAdapter";
private String BASE_URL, API_KEY;
private ArrayList<String> flags = new ArrayList<>();
private ArrayList<String> leagues = new ArrayList<>();
private ArrayList<String> dates = new ArrayList<>();
private Context context;
public HomeScreenRVAdapter(ArrayList<String> flags, ArrayList<String> leagues, ArrayList<String> dates, Context context) {
this.flags = flags;
this.leagues = leagues;
this.dates = dates;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_home, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
holder.league.setText(leagues.get(position));
holder.date.setText(dates.get(position));
}
@Override
public int getItemCount() {
return leagues.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
// HEADER WIDGETS
ExpansionHeader expansionHeader;
ImageView flag;
TextView league, date;
// LAYOUT WIDGETS
ExpansionLayout expansionLayout;
TextView minutes, local, visitor, localScore, visitorScore;
ImageView favourite;
public ViewHolder(@NonNull View itemView) {
super(itemView);
expansionHeader = itemView.findViewById(R.id.expansionHeader);
flag = itemView.findViewById(R.id.headerFlag);
league = itemView.findViewById(R.id.expansionHeaderLeague);
date = itemView.findViewById(R.id.expansionHeaderDate);
}
}
}
我想让应用程序在数据到来时多次迭代布局(layout_home)。但它不是迭代的。否则无论如何只迭代扩展布局?
解决方案
你的代码看起来不错。中很可能存在问题layout_home
。确保android:layout_height
设置为wrap_content
.
此外,您可以实现一个自定义对象ArrayList
,而不是创建三个单独的对象。自定义对象将保存每个项目的属性。但是,这是一个建议,我认为这不是您面临的错误的原因。
推荐阅读
- html - 如何在不拉伸和扭曲的情况下将css背景图像向右拉长?
- git - %f 在 git clean/smudge 过滤器中代表什么
- javascript - 如何同时访问解析器中的上下文和参数?
- authentication - 如何在组件加载前设置隐藏窗口属性?
- sql - PostgreSQL是否可以参数化查询中使用的表名?
- agile - 如何通过敏捷中的 QA 工作来确定团队成员的速度
- java - 我正在使用java开发一个项目并将其与数据库(oracle)连接,它是关于送餐桌面应用程序的
- android - 强制 Jetpack Compose 在方向更改时更新布局
- php - 创建 paymentIntent 后,如何在 Stripe 中更新客户的默认付款方式?
- java - 使用 Firebase 的组件的 Java 单元测试