Android 滚动时的ListView位置问题

Android 滚动时的ListView位置问题,android,listview,scroll,android-radiobutton,Android,Listview,Scroll,Android Radiobutton,我正在开发一个带有用户必须填写的表单的应用程序。 表单有一些textview、EditText、一个listview和两个按钮 listview由一个textview和两个单选按钮组成。 我用一个问题和每行两个单选按钮填充listview。 如果我重用重写的getView方法中给出的convertview,当我检查一个radiobutton时,它将检查第一个可见的radiobutton,同时根据每个滚动的屏幕向下滚动 @Override public View getView(int posi

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

listview由一个textview和两个单选按钮组成。 我用一个问题和每行两个单选按钮填充listview。 如果我重用重写的getView方法中给出的convertview,当我检查一个radiobutton时,它将检查第一个可见的radiobutton,同时根据每个滚动的屏幕向下滚动

 @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;
}
我做错了什么?我怎样才能解决这个问题? 如果你需要更多的信息,请询问,我会给你的

非常感谢您的帮助

上一条注释中的问题已解决,仅粘贴以下代码:


您需要将支票数据保存到数组中。当您向下滚动并返回选中行时,它不知道选中的位置。若并没有模型数组,只需创建一个选中列表,并在getview方法内部和数组内部设置all 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;
}

半途才完成。我用textview和字符串创建了一个自定义对象,这样我就可以知道是否单击了radiobutton以及单击了哪个radiobutton。现在的问题是,如果我离开:如果(convertView==null){convertView=((活动)上下文).GetLayoutFlater().inflate(R.layout.riskrowlayout,parent,false);}并单击一个单选按钮,滚动时会自动单击许多单选按钮。如果我删除if语句并只保留:convertView=((活动)上下文).getLayoutFlater().inflate(R.layout.riskrowlayout,parent,false)是否有问题;谢谢convertView参数本质上是一个“ScrapView”,如本文所述。我认为删除if语句可能会有问题。好的,我在过去的4个小时里一直在努力解决这个问题。问题是,如果我离开if语句并选择一个单选按钮,getViews的位置是随机的,所以当我滚动时,许多单选按钮显示为选中。否则,如果我删除if语句,一切都会正常工作,但listview的性能会明显下降。我能做什么?您需要添加另一个列表来存储您的单选按钮选择或未选择状态。在getView()中定义您的单选按钮,就像在textView中一样。然后执行以下操作:radioButton.setChecked(checked.get(position))。。。选中的将是一个列表类型bool.Yup,这和我添加到OP中的代码解决了这个问题。非常感谢你!!!!
@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;
}