【问题标题】:add recyclerView inside another recyclerView在另一个 recyclerView 中添加 recyclerView
【发布时间】:2018-05-04 06:30:28
【问题描述】:

我有一个要在回收站视图中显示的数据列表,并且工作正常。现在我有另一个动态数据列表要显示在父回收器视图中。所以我尝试在父回收器视图中使用另一个回收器视图,但效果不佳。如果我对在另一个中使用 recycler-view 有一些想法会很好。提前致谢..!

我用一个例子来说明我的问题:

例如:我有一个父 recyclerView 和五个线性布局,我在 Linearlayout 内创建了一个子 recyclerView,可见性已消失。现在,当我单击第一个 Linearlayout 时,我将第一个 Linearlayout 的子 recyclerView 的可见性更改为 VISIBLE,并为其附加一个单独的视图,并为所有其他 Linearlayout 附加相同的概念。当我单击第一个、第二个、第三个和第四个 linearLayout 时,子 recyclerView 没有显示我传递给它的日期,所有这些第一个、第二个、第三个和第四个数据都累积并显示在第五个 linearLayout 内的最后一个(即)中.

这是我的父回收站代码:

 class CardAdapter extends RecyclerView.Adapter<CardAdapter.MyViewHolder>
{
    RecyclerView insideCardRecyclerView,recyclerView;
    List<String> monthsWeek = new ArrayList<>();
    List<String> dealers = new ArrayList<>();
    List<String> dealersList = new ArrayList<>();
    List<String> date = new ArrayList<>();
    HashSet<String> dealersListHash = new HashSet<>();

    public CardAdapter(List<String> monthsWeek,List<String> dealers,List<String> date)
    {
        this.monthsWeek = monthsWeek;
        this.dealers = dealers;
        this.date = date;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder
    {

        ProgressBar progressBar;
        RecyclerView recyclerView;
        TextView period;
        LinearLayout linearLayoutParent,linearLayoutCardDetails;

        public MyViewHolder(View view)
        {
            super(view);
            linearLayoutParent = (LinearLayout) view.findViewById(R.id.card_view_linear_parent_layout);
            linearLayoutCardDetails = (LinearLayout) view.findViewById(R.id.linear_card_layout_details);
            period = (TextView) view.findViewById(R.id.period_summary_graph_card);
            insideCardRecyclerView = (RecyclerView) view.findViewById(R.id.summary_graph_card_view_recycler_view);
        }
    }

    @Override
    public CardAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View itemView = LayoutInflater.from(getActivity())
                .inflate(R.layout.summary_card_view,parent,false);
        recyclerView = (RecyclerView) parent;

        return new CardAdapter.MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position)
    {
        holder.period.setText(monthsWeek.get(position));

        holder.linearLayoutParent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                if(searchClick)
                {

                    for (String date1 : date)
                    {
                        if(Objects.equals(date1,monthsWeek.get(position)))
                        {
                            Log.e("Summary123 date..///", date1);
                            dealersList.add(dealers.get(date.indexOf(date1)));
                        }
                    }

                    searchClick = false;
                    holder.linearLayoutCardDetails.setVisibility(View.VISIBLE);

                    dealersListHash.addAll(dealersList);
                    dealersList.clear();
                    dealersList.addAll(dealersListHash);

//if the condition is true i am attaching another recyclerview inside this.

                        cardAdapterList = new CardAdapterList(dealersList);
                        LinearLayoutManager mLayoutManager1 = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL,true);
                        mLayoutManager1.setReverseLayout(false);
                        insideCardRecyclerView.setLayoutManager(mLayoutManager1);
                        insideCardRecyclerView.setItemAnimator(new DefaultItemAnimator());
                        insideCardRecyclerView.setAdapter(cardAdapterList);

                }
                else
                {
                    searchClick = true;
                    holder.linearLayoutCardDetails.setVisibility(View.GONE);
                }
            }
        });
    }

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

【问题讨论】:

  • 是我可以在 recyclerview 中填充我的列表的任何其他内容。
  • that is not working fine 是什么意思@是什么问题?
  • 您可以使用可展开的列表视图。

标签: android android-recyclerview


【解决方案1】:

当需要在应用程序的单个页面中显示多个列表时,我有时会遇到 RecyclerView 的麻烦。实际上,在一个布局中包含多个列表并不是一个好主意,但是,拥有一个 ScrollView 和该 ScrollView 中的列表的想法更糟糕。

我必须在 ScrollView 中实现一次 ListView,是的,这不是一个很好的体验。首先,我的列表根本没有滚动。然后,当在列表中检测到触摸时,我必须添加一些代码来禁用滚动。这不是解决实际问题的好主意。我遇到了另一个问题,即 ListView 的高度固定。如果列表项具有动态高度,则解决方案失败。

在布局中有两个列表,一个接一个也不是一个好主意。因为第一个列表需要有一个固定的高度。

因此,在搜索了有关如何在单个布局文件中实现两个列表的建议后,我发现大多数开发人员建议在必要时使用带有页眉和页脚的单个列表。后来,我可以设法使用我的自定义适配器在单个 RecyclerView 中显示两个列表。我想我应该保存我的一些代码以备将来使用,因此,你看到了这个注释。

您可以参考this sample code.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多