【问题标题】:How to put many RecyclerView into one RecyclerView如何将多个 RecyclerView 放入一个 RecyclerView
【发布时间】:2020-06-24 04:02:11
【问题描述】:

我正在尝试构建一个 android 应用程序,该应用程序将从 api 接收流派和电影列表。 我想根据流派列表的大小制作包含 X 数量的 RecyclerViews 的 RecyclerView。 流派列表可以从调用更改为调用,因为可以在后端添加更多流派,所以我想以编程方式创建一个 RecyclerViews。 我已经创建了一个包含流派回收器视图的主回收器视图。 我向适配器发送了流派列表。 在主回收器视图项中,创建另一个回收器视图,其中将包含此类型的电影。 但是在这里我停止了 =]] 不知道如何从这里继续填充回收站视图。 有什么建议吗?

genres = new ArrayList<>();
        genres.add(new Genre(0, "Action"));
        genres.add(new Genre(1, "Drama"));

        movies = new ArrayList<>();
        movies.add(new Movie("Titanic", "Test movie titanic", 0));
        movies.add(new Movie("Titanic", "Test movie titanic", 1));

主recyclerview的适配器:

public class MainRVAdapter extends RecyclerView.Adapter<MainRVAdapter.MainViewHolder> {

    private List<Genre> genres;

    public MainRVAdapter(List<Genre> genres) {
        this.genres = genres;
    }

    @NonNull
    @Override
    public MainViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_recycler_view_item, parent, false);
        return new MainViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MainViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return genres.size();
    }

    public class MainViewHolder extends RecyclerView.ViewHolder {

        private RecyclerView mainRecyclerView;

        public MainViewHolder(@NonNull View itemView) {
            super(itemView);
            mainRecyclerView = itemView.findViewById(R.id.mainRecyclerView);
        }
    }

}

MainRecyclerView 实现;

private void initMainRecyclerView() {
        RecyclerView mainRecyclerView = findViewById(R.id.mainRecyclerView);
        MainRVAdapter adapter = new MainRVAdapter(genres);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
        mainRecyclerView.setLayoutManager(linearLayoutManager);
        mainRecyclerView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }

【问题讨论】:

    标签: java android android-recyclerview


    【解决方案1】:

    我已经在 viewpager 中看到了许多回收器视图,它使用嵌套滚动,也可以将回收器视图用作父级。您将需要两个适配器,一个用于外部 rv,一个用于内部 rv,每个内部 rv 都有一个内部适配器的自己的实例。希望对您有所帮助。

    【讨论】:

    • 我喜欢第二种方式,实现2个recyclerview,外层和内层,你能根据我分享的代码多解释一下如何做到这一点吗?
    【解决方案2】:

    您想要一长串包含所有类型和电影的 recyclerviews 列表,还是想要一个类型列表,当您点击一个类型时,您会打开所有电影的列表?根据这一点,您将不得不将嵌套回收器充气到主回收器中,或者您必须使用电影回收器开始新的活动/片段。

    在这两种情况下,您都需要定义一个新的适配器:

    RecyclerView nestedRecyclerView = findViewById(R.id.mainRecyclerView);
            NestedRVAdapter adapter = new NestedRVAdapter(movies);
    
    

    使用您当前的数据,您需要使用所需的流派 ID 过滤电影。在 Genre 对象中实际保存某种类型的电影会更容易,可能是 ArrayList&lt;Movie&gt;()

    流派可以是HashMap&lt;int, Genre&gt;(),因此您可以直接访问它们:

    genres.get(1).name
    
    genres.get(1).movies
    

    因此您可以像这样在创建内部 RV 的位置初始化适配器:

    new NestedRVAdapter(genres.get(position).movies)
    

    看起来您有/想学习,所以将详细信息留给您。 :)

    如果您是 android 世界的新手,并且没有人强迫您使用 java,请考虑使用 kotlin,您会喜欢的!例如,Android Studio 有一个转换器,可以将您的类从 java 切换到 kotlin。

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2016-01-24
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      相关资源
      最近更新 更多