【问题标题】:ListView position problem while scrolling滚动时ListView位置问题
【发布时间】: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;
}

【问题讨论】:

    标签: android listview scroll android-radiobutton


    【解决方案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 的代码解决了这个问题。非常感谢!!!!
    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多