滚动时ListView位置问题
Posted
技术标签:
【中文标题】滚动时ListView位置问题【英文标题】:ListView position problem while scrolling 【发布时间】:2019-03-04 05:33:39 【问题描述】:我正在开发一个用户必须填写表格的应用程序。 该表单有一些文本视图、编辑文本、一个列表视图和两个按钮。
列表视图由一个文本视图和两个单选按钮组成。 我用一个问题和每行两个单选按钮填充列表视图。 如果我重用在覆盖的 getView 方法中给出的转换视图,当我检查一个单选按钮时,它会根据每个滚动的屏幕检查向下滚动时可见的第一个单选按钮。
@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】:您需要将支票数据保存到一个数组中。当您向下滚动并返回检查行时,它不知道检查的位置。如果您没有模型数组,只需创建一个选中列表并在 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;
【讨论】:
完成了一半。我用 textview 和一个字符串创建了一个自定义对象,所以我可以知道是否单击了单选按钮以及单击了哪个单选按钮。现在的问题是,如果我离开: if(convertView == null) convertView = ((Activity)context).getLayoutInflater().inflate(R.layout.riskrowlayout, parent, false);并单击一个单选按钮,滚动时会自动单击许多单选按钮。如果我删除 if 语句然后离开是否有问题: convertView = ((Activity)context).getLayoutInflater().inflate(R.layout.riskrowlayout, parent, false);谢谢! convertView 参数本质上是一个“ScrapView”,如本文所述。 lucasr.org/2012/04/05/performance-tips-for-androids-listview我认为如果你删除的语句可能有问题。 好的,过去 4 小时我一直在尝试解决此问题。问题是,如果我离开 if 语句并选择一个单选按钮,getViews 的位置是随机的,所以当我滚动时,许多单选按钮出现被选中。否则,如果我删除 if 语句,一切正常,但列表视图的性能明显更差。我能做什么? 您需要添加另一个列表来存储您的单选按钮选中或未选中状态。在 getView() 中定义您的单选按钮,就像在 textView 上所做的那样。并这样做:radioButton.setChecked(checked.get(position))... checked 将是一个列表类型 bool。 是的,那和我添加到 OP 的代码解决了这个问题。非常感谢!!!!以上是关于滚动时ListView位置问题的主要内容,如果未能解决你的问题,请参考以下文章