滚动时ListView位置问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了滚动时ListView位置问题相关的知识,希望对你有一定的参考价值。

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

列表视图由textview和两个radiobutton组成。我在列表视图中填充了一个问题,每行都有两个radiobuttons。如果我重复使用覆盖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;
}
答案

您需要将检查数据保存到数组中。当您向下滚动并返回选中的行时,它不知道在哪里检查。如果你没有模型数组,只需创建一个选中的列表并在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;
}

以上是关于滚动时ListView位置问题的主要内容,如果未能解决你的问题,请参考以下文章

Android:滚动整个片段,里面有 ListView

返回 ListView 时保持/保存/恢复滚动位置

滚动时ListView位置问题

滚动时ListView位置问题

更新 SimpleCursorAdapter,同时保持 ListView 中的滚动位置

ListVIew 再次构建后不会滚动到正确的偏移位置