Приложение не отображает элементы в RecyclerView

Я новичок в студии Android. Я пытаюсь отобразить элементы в RecycleView, но ничего не показывает.

Вот что говорит студия Android:


E/RecyclerView: No layout manager attached; skipping layout

Мой Фрагмент:

public class Articles extends Fragment {
    View root;
    RecyclerView recyclerView;
    NewsList[] myListData = new NewsList[] {
            new NewsList("Article 1", "Some Author"),
            new NewsList("Article2", "Some Author"),
            new NewsList("Article3", "Some Author"),

    };


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);






    }
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        root = inflater.inflate(R.layout.fragment_articles, container, false);
        recyclerView = root.findViewById(R.id.recyclerView);
        NewsAdapter adapter = new NewsAdapter(myListData);
        recyclerView.setHasFixedSize(true);
        recyclerView.setAdapter(adapter);


        return root;
    }

Вот код моего класса адаптера:

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
    private NewsList[] listdata;

    // RecyclerView recyclerView;
    public NewsAdapter(NewsList[] listdata) {

        this.listdata = listdata;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View listItem= layoutInflater.inflate(R.layout.list_item, parent, false);
        ViewHolder viewHolder = new ViewHolder(listItem);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        final NewsList myListData = listdata[position];
        holder.textView1.setText(listdata[position].getTitle());
        holder.textView2.setText(listdata[position].getAuthor());
        holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(),"click on item: "+myListData.getTitle(),Toast.LENGTH_LONG).show();
            }
        });
    }


    @Override
    public int getItemCount() {
        return listdata.length;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView1;
        public TextView textView2;
        public RelativeLayout relativeLayout;
        public ViewHolder(View itemView) {
            super(itemView);
            this.textView1 = (TextView) itemView.findViewById(R.id.textView1);
            this.textView2 = (TextView) itemView.findViewById(R.id.textView2);
            relativeLayout = (RelativeLayout)itemView.findViewById(R.id.relativeLayout);
        }
    }

Раньше у меня была ошибка, когда приложение вылетало при открытии фрагмента, но теперь оно пропускает RecyclerView. Буду признателен, если вы поможете мне решить этот вопрос.

Отвечает ли это на ваш вопрос? recyclerview Адаптер не подключен; пропуская макет

Biscuit 18.12.2020 18:27
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
0
1
109
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно добавить layoutManager к вашему виду переработчика:

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        root = inflater.inflate(R.layout.fragment_articles, container, false);
        recyclerView = root.findViewById(R.id.recyclerView);
        NewsAdapter adapter = new NewsAdapter(myListData);
        recyclerView.setHasFixedSize(true);
        // Add this line
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()))
        recyclerView.setAdapter(adapter);


        return root;
    }

Спасибо за ответ! Это сработало. Я знал, что мне нужен LinearLayoutManager, но я не знал, как его использовать в моем случае, так как я новичок в студии Android. Спасибо за помощь. :)

MayWheather 18.12.2020 18:44

Вам всегда нужно будет установить менеджер компоновки для представления ресайклера при его инициализации. Существуют различные типы менеджеров макетов в зависимости от типа макета, который вам нужно установить для вашего списка. LinearLayoutManager — самый простой из них. Для получения дополнительной информации см. developer.android.com/guide/topics/ui/layout/recyclerview

lpizzinidev 19.12.2020 10:34

Обязательно наличие менеджера компоновки для вашего Recyclerview. Например, вы можете использовать линейный, добавив это после раздувания вашего представления:

recyclerView.setLayoutManager(new LinearLayoutManager( context ));

Где контекст - это ваш контекст

Я попробовал этот метод, и он сказал, что это неправильный контекст, поэтому я попробовал метод Луки Пиццини. Все равно спасибо за помощь :)!

MayWheather 18.12.2020 18:46

Плохо, контекст здесь должен быть getActivity(), а не «этот». Я программирую на Котлине, так что это не совсем то же самое, но вчера я столкнулся именно с этой проблемой.

Pylvain 18.12.2020 18:52

Другие вопросы по теме