当前位置: 首页 > 知识库问答 >
问题:

OnBindViewHolder在来回滚动时创建动态项目视图的新实例

章德惠
2023-03-14

我有许多类似的情况,当我到达终点并返回时,我的无线电组选项和复选框会增加一个实例。

如;

滚动“option1 option 2”之前的单选按钮选项滚动后,我有“option1 option2 option1 option2”等等。。

@覆盖公共void onBindViewHolder(最终MyHolder holder,最终int位置){

    final MyData mData = dataList.get(position);
    switch (holder.getItemViewType()) {
        case 1:
            holder.textView0.setText(mData.getText());
            final int radioCount = mData.getTextFields().size();
            for (int i = 0; i < radioCount; i++) {
                RadioButton radio = new RadioButton(context);
                radio.setId(View.generateViewId());
                radio.setText(mData.getTextFields().get(i).getName());

                holder.radioGroup.addView(radio);
                radio.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View view) {
                       //do something

                    }
                });
            }

            break;

        case 2: holder.textView1.setText(mData.getText());


            List<Object> selectList1= new ArrayList<>() ;          
            int Option_Count = mData.getTextFields().size();

            for (int i = 0; i < Option_Count; i++) {
                final TableRow row = new TableRow(context);
                row.setId(i);
                row.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                CheckBox checkBox = new CheckBox(context);
                checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                        String joined="";
                        if (b) {
                            selectList1.add((String) compoundButton.getText());

                            joined = TextUtils.join(", ", selectList1);


                        } else {
                            selectList1.remove((String) compoundButton.getText());
                            joined = TextUtils.join(", ", selectList1);

                        }


                        if(b){

             
                        } }
                });
                checkBox.setId(i);
                checkBox.setText(mData.getTextFields().get(i).getLabel());
                row.addView(checkBox);
                holder.linearLayout1.addView(row);

            }

            break;


    }

}

共有1个答案

秦博达
2023-03-14

这是RecyclerView的标准行为。保持架是可重用的,当用户滚动时,会调用onBindViewHolder(),并再次添加单选按钮。

问题是,如何使其正确?您可以在onCreateViewHolder()中初始化您的视图。这对您来说可能吗?我不知道您的数据模型。例如,您可以在自定义Viewhold类的每个构造函数中添加单选按钮等。

 类似资料:
  • 我有一个问题与自动滚动在滚动视图。 在我的例子中,有两个Recyclerview。第一个循环视图,水平滚动,第二个垂直滚动。第一个循环视图仅用于拖动,第二个循环视图只用于拖放。两个循环视图都在ScrollView中,所以我在第二个循环视图中禁用了垂直滚动。我在第二个Recyclerview的项目中添加了DragListener。每个项目都有一个拖动侦听器,因此我在拖放项目时添加/替换项目。 所以我

  • 我知道如何在MVC中创建视图。

  • 我已经为recyclerView创建了一个适配器和ViewHolder。我将itemView的imageButton绑定到Viewholder中。并在onBindViewHolder中设置了onClickListener。 一切正常,但问题是,当我向下滚动列表时,imageButton的选定状态会因选定项目而改变,列表底部的一些项目已显示为选中。 下面是一些代码 适配器类 接口类 活动内的接口回调

  • 问题内容: 我正在使用awesomium制作游戏中的用户界面,有时游戏会加载并执行一段JavaScript,以创建任意新的UI元素。例如 效果很好,当我想创建一些更高级的UI元素(特别是使用angular)时,就会出现问题。例如: 毫不奇怪,这不会创建新的角度视图。它只是将该html添加到文档中,而从未绑定到ChatBoxControl。 我如何才能在这里实现自己的目标? 问题答案: 您应该$ c

  • 我正试着用一张纸牌做一张底纸。我可以把卡片放在最下面的纸上,但我在回收视图上遇到了问题。如图所示,它创建了多个底部纸张,其中包含卡片。我曾试图解决这个问题,但迄今为止运气不佳。我如何才能使其底部的纸张包含带有回收视图的卡片?我认为问题在于中的Recyclerview,但不知道该放在哪里。 MainActivity.kt CustomAdapter.kt activity_main backdrop

  • 创建任何新的 Android 项目后,Eclipse 会自动创建一个“appcompat_v7”项目,而 /src 下没有任何文件。我不知道Eclipse是如何或为什么创建这个项目的。我也得到了一个奇怪的错误。 正如你看到的AndroidManifest。项目中存在xml! EDIT1:清理项目后,奇怪的错误消失了,但我仍然想知道为什么创建appcompat_v7。 EDIT2:我还注意到Ecli