Android 从firestore数据库洗牌文档/字段
我正在尝试为我正在开发的测验程序找到一个解决方案。 1.一个问题集合下的10个文档中有10个问题。 2.每个问题都有1个正确答案和5个错误选项 这就是我到目前为止所做的: 1.我有一个线性布局的列表视图(除了显示问题和选项的文本视图:Android 从firestore数据库洗牌文档/字段,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我正在尝试为我正在开发的测验程序找到一个解决方案。 1.一个问题集合下的10个文档中有10个问题。 2.每个问题都有1个正确答案和5个错误选项 这就是我到目前为止所做的: 1.我有一个线性布局的列表视图(除了显示问题和选项的文本视图: <ListView android:id="@+id/queslist" android:layout_width="wrap_content" android:layout_height="0dp"
<ListView
android:id="@+id/queslist"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:visibility="invisible">
</ListView>
在Java代码中,我有一个适配器,它填充了问题集合中的所有文档,如下所示
ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, questions);
quesList.setAdapter(adapter);
chapterRef.document(chapterBase)
.collection(levelBase)
.document("Summary")
.collection("QUESTIONS")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
for(QueryDocumentSnapshot documentSnapshot : task.getResult()){
quesFull = documentSnapshot.getString("ques");
questions.add(quesFull);
Toast("questions "+questions);
}
adapter.notifyDataSetChanged();
}
});
ArrayAdapter=new ArrayAdapter(getApplicationContext(),android.R.layout.simple\u list\u item\u 1,问题);
quesList.setAdapter(适配器);
章节参考文件(章节库)
.集合(levelBase)
.文件(“摘要”)
.收集(“问题”)
.get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
对于(QueryDocumentSnapshot documentSnapshot:task.getResult()){
quesFull=documentSnapshot.getString(“ques”);
问题。添加(问题完整);
祝酒词(“问题”+问题);
}
adapter.notifyDataSetChanged();
}
});
到目前为止,一切都很好。现在我想实现这一目标:
当用户选择测验时,
1.所有10个问题都是随机排列的,因此对于其他用户,它们的顺序永远不会相同。
2.其次,我希望随机选择3个错误选项(从5个错误选项中)。
这使得选项总共有4个(包括正确答案)。
3.最后,我希望再次洗牌这4个选项,以便每次尝试的顺序都不同
有人能帮我吗
提前感谢。对于那些想为类似问题寻找答案的人,以下是解决问题的方法。 但是,如果有人有更好的解决方案,请在此分享 我首先创建了一个列表字符串=问题,然后将数字添加到其中。当然,这可以进一步改进 然后,我调用了QuestionShuffle方法
private void QuestionShuffle() {
questions.add("1");
questions.add("2");
questions.add("3");
questions.add("4");
questions.add("5");
questions.add("6");
questions.add("7");
questions.add("8");
questions.add("9");
questions.add("10");
Collections.shuffle(questions);
}
使用.get(索引),我得到了问题的无序顺序
String docnumber = questions.get(counter);
对于洗牌选项,使用了以下代码
private void OptionShuffle(){
Random random = new Random();
List<String> givenList = Lists.newArrayList("0", "1", "2", "3", "4");
int numOfopts = 3;
options.clear();
for(int i = 0; i < numOfopts; i++){
int randomIndex = random.nextInt(givenList.size());
String selection = givenList.get(randomIndex);
options.add(optList.get(Integer.parseInt(selection)));
givenList.remove(randomIndex);
}
optionA.setText(ansFull);
options.add(ansFull);
Collections.shuffle(options);
optionA.setText(options.get(0));
optionB.setText(options.get(1));
optionC.setText(options.get(2));
optionD.setText(options.get(3));
}
private void options shuffle(){
随机=新随机();
List givenList=Lists.newArrayList(“0”、“1”、“2”、“3”、“4”);
int numopts=3;
选项。清除();
for(int i=0;i