Recylerview во фрагменте не заполняется элементами - PullRequest
0 голосов
/ 18 февраля 2020

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

2020-02-18 15:08:26.730 4467-4467/com.social.voteup E/RecyclerView: No adapter attached; skipping layout

Дважды проверил, что все связывается с файлом xml. Вот мой код:

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_home, container, false);
        return view;
    }

При просмотре Создан метод

mRecyclerView = view.findViewById (R.id.posts_recyclerview); mSwipeRefreshLayout = view.findViewById (R.id.refreshLayout);

mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

setupAdapter();

// Refresh Action on Swipe Refresh Layout
mSwipeRefreshLayout.setOnRefreshListener(() -> mAdapter.refresh());

Я использую адаптер внутри фрагмента, как показано здесь:

 private void setupAdapter() {

        // Init Paging Configuration
        PagedList.Config config = new PagedList.Config.Builder()
                .setEnablePlaceholders(false)
                .setPrefetchDistance(2)
                .setPageSize(10)
                .build();

        // Init Adapter Configuration
        FirestorePagingOptions<Post> options = new FirestorePagingOptions.Builder<Post>()
                .setLifecycleOwner(this)
                .setQuery(mQuery, config, Post.class)
                .build();

        // Instantiate Paging Adapter
        mAdapter = new FirestorePagingAdapter<Post, PostViewHolder>(options) {
            @NonNull
            @Override
            public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = getLayoutInflater().inflate(R.layout.item_post, parent, false);
                return new PostViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull PostViewHolder viewHolder, int i, @NonNull Post post) {
                // Bind to ViewHolder
                viewHolder.bind(post);
            }

            @Override
            protected void onError(@NonNull Exception e) {
                super.onError(e);
                Log.e("MainActivity", Objects.requireNonNull(e.getMessage()));
            }

            protected void onLoadingStateChanged(@NonNull LoadingState state) {
                switch (state) {
                    case LOADING_INITIAL:
                    case LOADING_MORE:
                        mSwipeRefreshLayout.setRefreshing(true);
                        break;

                    case LOADED:
                        mSwipeRefreshLayout.setRefreshing(false);
                        break;

                    case ERROR:

                        mSwipeRefreshLayout.setRefreshing(false);
                        break;

                    case FINISHED:
                        mSwipeRefreshLayout.setRefreshing(false);
                        break;
                }
            }

        };

        // Finally Set the Adapter to mRecyclerView
        mRecyclerView.setAdapter(mAdapter);

    }

Вот полный исходный файл на pastebin : https://pastebin.com/YkzKRuUD

1 Ответ

0 голосов
/ 18 февраля 2020

Добавьте эту строку кода в методе On View Created.

Вы создали адаптер, но не подключили адаптер к recyclerView


mRecyclerView = view.findViewById(R.id.posts_recyclerview); 
mSwipeRefreshLayout = view.findViewById(R.id.refreshLayout);

mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

mRecyclerView.setAdapter(new setupAdapter());

// Refresh Action on Swipe Refresh Layout
mSwipeRefreshLayout.setOnRefreshListener(() -> mAdapter.refresh());

...