java - 子数组列表输出在 n 个元素后重复自身

标签 java android arraylist

新手。我正在编写一个测验应用程序 full code on Github加载带有四个参数的 arrayList:

  1. 问题
  2. 图像(来自可绘制对象)
  3. 关键答案
  4. radioGroup(子数组列表)中呈现的可能答案

来自 strings.xml 如下

    ...
    <string name="questionOne">Who is the "Modern Love" rock star singer?</string>
    <string name="answerOne">David Bowie</string>

    <string-array name="celebrityOne">
        <item>Jaimie Hendrix</item>
        <item>David Bowie</item>
        <item>Jim Morrison</item>
        <item>Elvis Presley</item>
    </string-array>
    ...

下面是如何在 MainActivity 中加载参数(第三个参数是子数组列表)

    ArrayList<Object> arrayList = new ArrayList<>();
    loaddata()

    ...

    public void loadData() {
        arrayList.add(new Quiz(getResources().getString(R.string.questionOne), 
                getResources().getDrawable(R.drawable.celebrity_one_image, null), 
                new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.celebrityOne))),
                getResources().getString(R.string.answerOne)));   

        arrayList.add(new Quiz(getResources().getString(R.string.questionTwo), 
                getResources().getDrawable(R.drawable.celebrity_two_image, null), 
                new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.celebrityTwo))),
                getResources().getString(R.string.answerTwo)));

        ...  

    }

问题是在 N 次迭代之后,子数组列表开始重复自身(参见下图)。

另外,我认为问题的根源可能是在适配器中,其中子数组中的每个字符串都被分配给一个radioButton


      void createRadioButtons(String[] arrayAnswer) {
            if (mRadioGroup.getChildAt(0) != null)
                return;
            for (int i = 0; i < arrayAnswer.length; i++) {
                mRadioGroup.addView(createRadioButtonAnswerAndSetOnClickListener(arrayAnswer[i]));
            }
        }

        RadioButton createRadioButtonAnswerAndSetOnClickListener(String string) {
            RadioButton radioButton = new RadioButton(mContext);
            radioButton.setText(string);
            radioButton.setOnClickListener(this);
            return radioButton;
        }

First Image Second image

我的情况可能类似于 this但我没有静态字段,并且 arrayList 被初始化为新的,因此不需要 clear()

最佳答案

来自Documentation :

RecyclerView 仅创建显示动态内容的屏幕部分所需的 View 持有者以及一些额外的 View 持有者。当用户滚动列表时,RecyclerView 获取屏幕外 View 并将它们重新绑定(bind)到滚动到屏幕上的数据。

这意味着 RecyclerView 在滚动时重用已创建的 View 持有者(这就是数据重复的原因),并且您必须使用新数据重新填充 View 。因此,当 mRadioGroup.getChildAt(0) != null 时,您必须将 RadioButtons 文本更改为新数据,而不是从 createRadioButtons 方法返回来自arrayAnswer

关于java - 子数组列表输出在 n 个元素后重复自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60789117/

相关文章:

Java:获取ArrayList中指定元素之前是否存在元素

c - 从数组列表中删除重复项

java - SAX解析器: Specify DTD location in applet

java - 修改玩家列表计分板

Android webview loadurl 在不同的类中完成并缓存

java - 无法获取纬度和经度值。应该更改什么?

iphone - 如何通过媒体查询区分 Android 和 iPad?

java - 如何在类级别添加 ArrayList?

java - 与 Java 应用程序相比,Tomcat8 中的 JDBC 性能非常非常慢

java - 如何使用 JSR 303(Bean 验证)?