首页 > 解决方案 > 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)。但它不是迭代的。否则无论如何只迭代扩展布局?

标签: androidandroid-recyclerview

解决方案


你的代码看起来不错。中很可能存在问题layout_home。确保android:layout_height设置为wrap_content.

此外,您可以实现一个自定义对象ArrayList,而不是创建三个单独的对象。自定义对象将保存每个项目的属性。但是,这是一个建议,我认为这不是您面临的错误的原因。


推荐阅读