Android:当我使用 scrollTo(x,y) 滚动 ListView 时,ListView 不会重绘

标签 android listview

  1. 我的 ListView 在后台(使用相对布局)。
  2. 我有一个用作 ListView 中的 View 的文本框,它为不同的行设置了不同的背景颜色。这是在适配器中使用以下代码完成的。

    public View getView(int position, View convertView, ViewGroup parent)
    {
    
        View rowView = convertView;
    
        if (rowView == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            rowView = inflater.inflate(R.layout.listview_background, null);
            rowView.setTag(new ViewHolder((TextView) rowView.findViewById(R.id.listBackgroundTV)));
        }
    
        ((ViewHolder)rowView.getTag()).tv.setHeight((position != 0)?((CompareTextBox)((Activity)context).findViewById(R.id.ctb1)).getLineHeight():((CompareTextBox)((Activity)context).findViewById(R.id.ctb1)).getLineHeight() + (int) (context.getResources().getDisplayMetrics().density + 0.5f));
        ((ViewHolder)rowView.getTag()).tv.setBackgroundColor((b[position])?0xff000000:0xffffffff);
    
        return rowView;
    }
    

因此您会看到文本框背景颜色是使用该位置设置的。

  1. 现在我使用 ListView.scrollTo(x,y) 函数向上滚动 ListView。
  2. 现在,由于文本框的背景是根据位置计算的,当 ListView 向上滚动时,应该为显示的新行显示正确的文本框颜色。但这并没有发生。 ListView 中所有因向上滚动而暴露的项具有相同的黑色背景。

知道如何刷新/重绘 ListView View ,或者在上面的代码中发现任何问题吗?

最佳答案

您可以通过调用 notifyDataSetChanged() 来刷新 ListView适配器的方法。您可以尝试在 scrollTo 之后调用它,即使如果底层数据集发生更改以刷新 View 项通常应该调用它。

关于Android:当我使用 scrollTo(x,y) 滚动 ListView 时,ListView 不会重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14798607/

相关文章:

Android AlarmManager.set(...) : notification never received when battery low

android - https 连接适用于 Wifi (wlan) 但不适用于 3G/GPRS (umts)

c# ListView 标题的单独上下文菜单

android - 如果自定义 ListView 行内容是动态的,如何使用 View 持有者?

java - 如何在android的 ListView 中返回点击的阀门?

android - 将对话框中的项目添加到 ListView

android - adb -s 192.168.1.6 :5555 . ....错误:不止一个设备/模拟器

android - 如何从 developer.android.com 导入 ActivityLifecycle.zip 到 Android Studio?

java - 在 Android 中将对象转换为 JSON

WPF 从 GridView 的选择/鼠标上移除光泽效果