Извините за этот 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