无法使用arraylist向recyclerView添加项目

时间:2016-02-06 14:55:10

标签: android android-recyclerview

我正在为我的应用使用firebase数据库。 我可以从数据库中添加和检索数据,但是当我尝试在arraylist中添加检索到的数据时,我无法填充arraylist。

public class SplitString {

public static void main(String[] args) {

    String s = "This is test string1./This is test string2@(#*$ ((@@{}";
    String[] fragments = s.split("/");
    String fragment1 = fragments[0];
    String fragment2 = fragments[1];

    System.out.println(fragment1);
    System.out.println(fragment2);

    }

}

这个retrievePosts方法正在解析我的数据,而postList.add(post);第一行我试图将数据添加到arraylist。 我在调用retrievePosts()之前初始化了arraylist;方法,然后尝试在我的recyclyerView

中添加arraylist
 public void retrievePosts(){

    retrievePosts.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Toast toast = Toast.makeText(getApplicationContext(), "There are " + dataSnapshot.getChildrenCount() + " blog posts", Toast.LENGTH_LONG);
            toast.show();

            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                Post post = postSnapshot.getValue(Post.class);
                //adding data to the list
                  Toast toastNew = Toast.makeText(getApplicationContext(), post.getAuthor()+"_"+post.getTitle()+"_"+post.getContent(), Toast.LENGTH_SHORT);
                toastNew.show();
                postList.add(post);

            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Snackbar snackbar = Snackbar.make(coordinatorLayout, "Unable to fetch posts", Snackbar.LENGTH_LONG);
            snackbar.show();
        }
    });

}

无法找到我做错的事。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果您的适配器引用了postList,那么在postList更改时也需要告知它,以便它可以告诉RecyclerView它需要重新查询它(适配器)更新的观点。

您可以使用RecyclerView.Adapter上的notifyDataSetChanged() method执行此操作。

你应该警惕 - 虽然不太可能,但是在初始化适配器之前可能会检索帖子(如果你使用我上面的答案,会导致空指针异常)。我会将retrievePosts()电话移至最后。