滚动时ListView位置问题

时间:2018-09-28 08:49:30

标签: android listview scroll android-radiobutton

我正在开发一个带有用户必须填写的表单的应用程序。 表单具有一些textview,edittext,一个listview和两个按钮。

列表视图由一个文本视图和两个单选按钮组成。 我用一个问题和每行中的两个单选按钮填充列表视图。 如果我重复使用重写的getView方法中给定的convertview,则当我检查单选按钮时,它将按向下滚动的每个屏幕检查可见的第一个单选按钮。

 @Override
public View getView(int position, View convertView, ViewGroup parent){
    if(convertView == null){
        convertView = ((Activity)context).getLayoutInflater().inflate(R.layout.riskrowlayout, parent, false);
    }

    ((TextView)convertView.findViewById(R.id.tvPreg)).setText(data.get(position));
    return convertView;
}

否则,如果每次调用getView时都对布局进行充气,它将自动取消选中滚动时选中的单选按钮。

@Override
public View getView(int position, View convertView, ViewGroup parent){
    convertView = ((Activity)context).getLayoutInflater().inflate(R.layout.riskrowlayout, parent, false);

    ((TextView)convertView.findViewById(R.id.tvPreg)).setText(data.get(position));
    return convertView;
}

我做错了什么?我该如何解决? 如果您需要更多信息,请给我。

非常感谢您!

最后一条注释中的问题已解决,只需将这段代码粘贴到another post中:

@Override
public int getViewTypeCount() {                 
return getCount();
}

@Override
public int getItemViewType(int position) {
return position;
}

1 个答案:

答案 0 :(得分:0)

您需要将检查数据保存在一个数组中。当您向下滚动并返回选中的行时,它不知道在哪里检查。如果您没有模型数组,则只需创建一个检查列表,然后在getview方法内部和内部设置所有false即可查看数组。

@Override
public View getView(int position, View convertView, ViewGroup parent){
    if(convertView == null){
        convertView = ((Activity)context).getLayoutInflater().inflate(R.layout.riskrowlayout, parent, false);
    }

    TextView textView = (TextView) convertView.findViewById(R.id.tvPreg);


    textView.setText(data.get(position));
    radioButton.setChecked(checked.get(position));


    return convertView;
}
相关问题