Collections.shuffle(list)不会改变我的列表

时间:2018-05-16 17:23:05

标签: java android collections shuffle

我的测验应用程序出了问题。我必须填写我的问题列表(取自Firebase数据库),但我的代码似乎是错误的。

File Start.java:

private void loadQuestion(String categoryId) {

        //First, clear list if have old question
        if(Common.questionList.size() > 0)
            Common.questionList.clear();

        questions.orderByChild("CategoryId").equalTo(categoryId)
                .addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for(DataSnapshot postSnapshot : dataSnapshot.getChildren())
                        {
                            Question ques = postSnapshot.getValue(Question.class);
                            Common.questionList.add(ques);
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
        //Random list
        Collections.shuffle(Common.questionList);
    }

和文件Common.java:

public class Common {
    public static String categoryId;
    public  static User currentUser;
    public static List<Question> questionList = new ArrayList<>();
}

谢谢大家。

1 个答案:

答案 0 :(得分:2)

您的数据是通过回调addValueEventListener

添加的

在功能开始时,清除列表:

        Common.questionList.clear();

所以Collections.suffle只会在您的空列表中随机播放

你想要的是将shuffle功能放在你的回调中:

                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot postSnapshot : dataSnapshot.getChildren())
                    {
                        Question ques = postSnapshot.getValue(Question.class);
                        Common.questionList.add(ques);
                    }
                    // Shuffle it
                    Collections.shuffle(Common.questionList);

                }