在另一个recyclerView中添加recyclerView

时间:2018-05-04 06:30:29

标签: android android-recyclerview recycler-adapter

我有一个要在回收站视图中显示的数据列表,并且工作正常。现在我有另一个动态的数据列表显示在父回收器视图中。所以我尝试在父级回收器视图中使用另一个回收器视图,但这样做不正常。如果我知道在另一个内部使用recycleler-view,那将会很好。提前致谢..!

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

例如:我有一个父级recyclerView,其中包含五个linearLayout,我在recyclerView内创建了一个可见度为GONE的子Linearlayout。现在,当我点击第一个Linearlayout时,我将第一个Linearlayout的子recyclerView的可见性更改为VISIBLE,并为其添加单独的视图,并为所有其他Linearlayout添加相同的概念。当我点击第一个,第二个,第三个和第四个线性时,会发生什么情况。子回收器视图没有显示我传递给它的日期,所有第一,第二,第三和第四个数据都被累积并显示在最后一个(即)第五个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();
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

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

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

您可以参考this sample code.