0

По названию этого вопроса его легко понять, что адаптер recyclerview не установлен внутри нити пользовательского интерфейса. Но в моем случае, чтобы избежать этого, я попытался сделать это даже в потоке пользовательского интерфейса, но все равно не повезло.E/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); 
} 

метод моей деятельности в OnCreate() имеет ниже кода, связанного с RecyclerView:

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

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

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

+0

Является ли recyclerview отображением элементов? – Jickson

+0

Не отображается. Это мой вопрос. –

+2

Сначала установите пустой адаптер, обновите его, как только у вас есть данные. !! И ** Убедитесь, что ваш 'getItemCount()' не возвращает '0' ** .. !! –

ответ

1

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

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

Что вы здесь делаете неправильно. В recyclerview всегда должен быть установлен адаптер. Вам просто нужно обновить данные в адаптере.

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

0

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

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

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

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

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

+0

Код внутри моего метода onCreate(): mRecyclerView = (RecyclerView) findViewById (R.id.challenge_recycler_view); mRecyclerView.setHasFixedSize (true); LinearLayoutManager layoutManager = новый LinearLayoutManager (это); mRecyclerView.setLayoutManager (layoutManager); –

Смежные вопросы