0

通过这个问题的标题,很容易理解,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);

我不明白为什么即使在调用loadFriendsinside之后runOnUiThread,为什么错误仍然存​​在。

任何帮助表示赞赏。

4

2 回答 2

1

RecyclerView初始化和附加 LayoutManager 等时需要附加适配器。

loadFriends方法应该获取数据并将数据添加到适配器,然后您应该调用notifyDataSetChanged或等效。

你在这里做的是不正确的。recyclerview 应该始终连接一个适配器。您只需要更新适配器中的数据。

这就是错误所说的E/RecyclerView﹕ No adapter attached; skipping layout。因为您在附加 LayoutManager 后没有附加适配器,并且您在稍后阶段附加适配器。

于 2016-06-30T06:08:57.173 回答
0

您是否尝试在您的 recyclerView 中添加 LayoutManager?

确保您致电setLayoutManager,如下所示。

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

在将适配器设置为 recyclerView 之前,否则它将无法正常工作。

来源:-recyclerview-not-call-any-adapter-method

于 2016-06-29T17:22:09.113 回答