RecyclerView во фрагменте не загружается - PullRequest
0 голосов
/ 06 мая 2020

Tl: dr: Я создал свою собственную нижнюю панель навигации, которая перенаправляет на 3 разных фрагмента. Фрагмент 1 (Trips) имеет recyclerview, в котором я отображаю 3 информации (ImageView, 2 TextViews). Этот recyclerview не загружается (нет сообщения об ошибке), на этом фрагменте есть пустой экран. Я подозреваю, что проблема заключается в том, как я загружаю ресайклер из класса Fragment Java, но безуспешно (прошел несколько руководств по YT и статьи по stackoverflow, которые смог найти)

Некоторые шаги, которые я попробовал (я относительно новичок в Android, поэтому попробовал другой сценарий ios) - Чистый проект - Проверьте @override (другая статья о stackoverflow) - во фрагменте: разделил мой код на 2: OncreateView, где я раздуваю макет и OnViewCreated куда я загружаю адаптер. - другой фрагмент (с жестко закодированным текстом) работает, что указывает на то, что Fragmentmanager, похоже, работает

Спасибо за любой совет


Fragment

package com.example.projectapp;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    public class Trip extends Fragment {


        private RecyclerView.Adapter adapter;
        private RecyclerView recyclerView;
        private RecyclerView.LayoutManager layoutManager;


        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_trips, container, false);

            RecyclerView recyclerView= (RecyclerView) v.findViewById(R.id.recycler);
            adapter listAdapter= new adapter();
            recyclerView.setAdapter(listAdapter);
            RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(getActivity());
            recyclerView.setLayoutManager(layoutManager);
            return v;
        }}




    ---------------------------------------------------------
    Adapter class
    ---------------------------------------------------------


    package com.example.projectapp;

    import android.provider.ContactsContract;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;

    import androidx.annotation.NonNull;
    import androidx.recyclerview.widget.RecyclerView;

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    public class adapter extends RecyclerView.Adapter<adapter.adapterview> {
        public class adapterview extends RecyclerView.ViewHolder{

            public LinearLayout linearLayout;
            public ImageView imageView;
            public TextView title;
            public TextView short_desc;


            public adapterview(@NonNull View itemView) {
                super(itemView);
                linearLayout=itemView.findViewById(R.id.card);
                imageView=itemView.findViewById(R.id.pix);
                title=itemView.findViewById(R.id.titlecard);
                short_desc=itemView.findViewById(R.id.short_desc);

            }


        }

        public List<card> item_list= Arrays.asList(
                new card(R.drawable.ic_home,"this is a test","testing 2"),
                new card(R.drawable.ic_home,"this is a test1","testing 3"),
                new card(R.drawable.ic_home,"this is a test2","testing 4")
                );

        @NonNull
        @Override
        public adapterview onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

            View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false);
            return new adapterview(v);
                }

        @Override
        public void onBindViewHolder(@NonNull adapterview holder, int position) {
            card current= item_list.get(position);
            holder.title.setText(current.getTitle());
            holder.short_desc.setText(current.getDesc());
            holder.imageView.setImageResource(current.getimage());
        }

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

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Просто установите адаптер RecyclerView после того, как вы установите его LayoutManager. Итак, измените порядок строк на:

RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.recycler);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);   
adapter listAdapter= new adapter();
recyclerView.setAdapter(listAdapter);
0 голосов
/ 07 мая 2020

Хорошие новости. Я исправил проблему (но не уверен в причине root). Я в основном сделал 2 изменения на случай, если это поможет другим: 1. Я передал своему адаптеру (в файле фрагмента) список объектов и контекст. 2. Я удалил 1 Textview из своего макета (элемент из представления ресайклера), который мог помешать его загрузке (?)

Теперь следующая проблема: попытка использовать cardview, так как этот linearlayout не очень хорош, спасибо всем

0 голосов
/ 06 мая 2020

Не вызывайте ресайклер в onCreateView, сделайте это в onViewCreated.

@Override
public View onViewCreated(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

            RecyclerView recyclerView= (RecyclerView) v.findViewById(R.id.recycler);
            adapter listAdapter= new adapter();
            recyclerView.setAdapter(listAdapter);
            RecyclerView.LayoutManager layoutManager= new LinearLayoutManager(getActivity());
            recyclerView.setLayoutManager(layoutManager);
        }
}

...