E/RecyclerView﹕ Адаптер не подключен; пропуск макета

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

Я использую FirebaseUI для своего приложения. Ниже приведен фрагмент кода:

public static void getUserFromUserId(@NonNull DatabaseReference dbRef, @NonNull String userId) {
    dbRef.child(USERS).child(userId)
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    User user = dataSnapshot.getValue(User.class);
                    FriendsActivity.this.runOnUiThread(new Handler() {
                        @Override
                        public void run() {
                            loadFriends(user);
                        }
                    });

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    FirebaseCrash.report(databaseError.toException());
                }
            });
}

private void loadFriends(User user) {
    Query friendsRef = ;  // your firebase DatabseReference path
    FirebaseRecyclerAdapter<Friend, FriendViewHolder> adapter =
            new FirebaseRecyclerAdapter<Friend, FriendViewHolder>(Friend.class,
                    R.layout.item_challenge, FriendViewHolder.class, friendsRef) {
                @Override
                protected void populateViewHolder(FriendViewHolder viewHolder, Friend model, int position) {
                    viewHolder.setFriendName(model.getName());
                    viewHolder.setFriendPic(FriendActivity.this, model.getProfilePic());
                }
            };
    mRecyclerView.setAdapter(adapter);
}

Метод My Activity onCreate() имеет следующий код, связанный с RecyclerView:

mRecyclerView = (RecyclerView) findViewById(R.id.challenge_recycler_view);
    mRecyclerView.setHasFixedSize(true);
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(layoutManager);

Я не понимаю, почему даже после вызова loadFriends внутри runOnUiThread ошибка все еще сохраняется.

Любая помощь приветствуется.


person Chandra Sekhar    schedule 29.06.2016    source источник
comment
Отображает ли recyclerview элементы?   -  person Jickson    schedule 29.06.2016
comment
Не отображается. Вот в чем мой вопрос.   -  person Chandra Sekhar    schedule 30.06.2016
comment
Просто сначала установите пустой адаптер, обновите его, как только у вас появятся данные..!! И убедитесь, что ваш getItemCount() не возвращает 0..!!   -  person Janki Gadhiya    schedule 30.06.2016


Ответы (2)


Вам необходимо прикрепить свой адаптер при инициализации RecyclerView и присоединении LayoutManager и т. д.

loadFriends должен извлекать данные и добавлять данные в адаптер, а затем следует вызывать notifyDataSetChanged или аналогичный.

То, что вы здесь делаете, неправильно. Recyclerview всегда должен иметь подключенный адаптер. Вам просто нужно обновить данные в адаптере.

И вот что говорит ошибка E/RecyclerView﹕ No adapter attached; skipping layout. Потому что вы не подключили адаптер после подключения LayoutManager и подключаете адаптер на более позднем этапе.

person Froyo    schedule 30.06.2016

Вы пытались добавить LayoutManager в свой recyclerView?

Убедитесь, что вы звоните setLayoutManager, как показано ниже.

recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

перед установкой адаптера в recyclerView, иначе он не будет работать.

Источник: - recyclerview-not-call-any-adapter-method

person AAnkit    schedule 29.06.2016
comment
Код внутри моего метода onCreate(): mRecyclerView = (RecyclerView) findViewById(R.id.challenge_recycler_view); mRecyclerView.setHasFixedSize (истина); LinearLayoutManager layoutManager = новый LinearLayoutManager (этот); mRecyclerView.setLayoutManager(layoutManager); - person Chandra Sekhar; 29.06.2016