добавить recyclerView внутри другого recyclerView - PullRequest
0 голосов
/ 04 мая 2018

У меня есть список данных, которые будут отображаться в представлении переработчика, и это работает нормально. Теперь у меня есть другой динамический список данных, которые будут отображаться в родительском представлении переработчика. Поэтому я попытался использовать другое представление переработчика внутри родительского представления переработчика, которое не работает нормально. Было бы хорошо, если бы я получил представление об использовании в новом окне. Заранее спасибо..!

Я проиллюстрировал мою проблему на примере:

Например: у меня есть родитель recyclerView с пятью linearLayout, и я создал дочернего элемента recyclerView внутри Linearlayout с видимостью GONE. Теперь, когда я щелкаю по первому Linearlayout, я изменяю видимость дочернего элемента recyclerView для первого Linearlayout на 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();
    }
}

1 Ответ

0 голосов
/ 04 мая 2018

Иногда у меня возникали проблемы с RecyclerView, когда на одной странице приложения нужно было отобразить несколько списков. На самом деле не очень хорошая идея иметь несколько списков в одном макете, но идея иметь ScrollView и списки внутри этого ScrollView еще хуже.

Я должен был реализовать ListView внутри ScrollView один раз, и да, это был не очень хороший опыт. Во-первых, мой список вообще не был прокручиваем. Затем мне пришлось добавить код, чтобы отключить прокрутку при обнаружении касания в списке. Это была не очень хорошая идея для решения актуальной проблемы. У меня была другая проблема с фиксированной высотой ListView. В случае элементов списка с динамическими высотами решение не удалось.

Наличие двух списков в макете, один за другим, тоже не очень хорошая идея. Поскольку первый список должен иметь фиксированную высоту.

Итак, после поиска предложений о том, как реализовать два списка в одном файле макета, я обнаружил, что большинство разработчиков предлагают использовать один список с верхним и нижним колонтитулами, если это необходимо. Позже мне удалось показать два списка в одном RecyclerView, используя мой собственный адаптер. Я подумал, что должен сохранить часть своего кода для будущего использования, и, следовательно, вы видите эту заметку.

Вы можете сослаться на этот пример кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...