E/RecyclerView﹕没有附上适配器;跳过布局
E/RecyclerView﹕ No adapter attached; skipping layout
根据这个问题的标题,很容易理解,recyclerview的适配器没有设置在UI线程中。但就我而言,为了避免这种情况,我什至在 UI 线程上尝试过这样做,但仍然没有运气。
我正在为我的应用程序使用 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);
}
我的 Activity 的 onCreate() 方法有以下与 RecyclerView 相关的代码:
mRecyclerView = (RecyclerView) findViewById(R.id.challenge_recycler_view);
mRecyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
我不明白为什么在 runOnUiThread
中调用 loadFriends
之后,错误仍然存在。
感谢任何帮助。
您尝试过在您的 recyclerView 中添加 LayoutManager 吗?
请务必拨打 setLayoutManager
,如下所示。
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
在将适配器设置到 recyclerView 之前,否则将无法工作。
来源:-
初始化 RecyclerView
和附加 LayoutManager 等时需要附加适配器
loadFriends
方法应该获取数据并将数据添加到适配器,然后您应该调用 notifyDataSetChanged
或等效方法。
你在这里做的是不正确的。 Recyclerview 应该始终连接一个适配器。您只需要更新适配器中的数据即可。
这就是错误所说的 E/RecyclerView﹕ No adapter attached; skipping layout
。因为您在附加 LayoutManager 后没有附加适配器,并且您要在稍后阶段附加适配器。
根据这个问题的标题,很容易理解,recyclerview的适配器没有设置在UI线程中。但就我而言,为了避免这种情况,我什至在 UI 线程上尝试过这样做,但仍然没有运气。
我正在为我的应用程序使用 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);
}
我的 Activity 的 onCreate() 方法有以下与 RecyclerView 相关的代码:
mRecyclerView = (RecyclerView) findViewById(R.id.challenge_recycler_view);
mRecyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
我不明白为什么在 runOnUiThread
中调用 loadFriends
之后,错误仍然存在。
感谢任何帮助。
您尝试过在您的 recyclerView 中添加 LayoutManager 吗?
请务必拨打 setLayoutManager
,如下所示。
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
在将适配器设置到 recyclerView 之前,否则将无法工作。
来源:-
初始化 RecyclerView
和附加 LayoutManager 等时需要附加适配器
loadFriends
方法应该获取数据并将数据添加到适配器,然后您应该调用 notifyDataSetChanged
或等效方法。
你在这里做的是不正确的。 Recyclerview 应该始终连接一个适配器。您只需要更新适配器中的数据即可。
这就是错误所说的 E/RecyclerView﹕ No adapter attached; skipping layout
。因为您在附加 LayoutManager 后没有附加适配器,并且您要在稍后阶段附加适配器。