【问题标题】:ListView custom drawable is removed when scrolling滚动时删除 ListView 自定义可绘制对象
【发布时间】:2014-10-16 02:31:27
【问题描述】:

我为我的列表视图创建了一个自定义选择器,它使用可绘制对象更改列表项的背景颜色。我以前在滚动时遇到背景颜色扩展到列表中随机视图的问题,我通过使适配器中的视图始终为空来解决此问题,但是当我滚动时,一旦项目不再可见,设置的背景颜色已经不在了,就好像它不记得了一样。这可能是由于视图始终为空?

我基本上希望更改所选项目而不影响列表中的其他项目,并且在滚动时,应该记住更改的项目。

public View getView(int pos, View view, ViewGroup viewgroup)
{
    View row = null;
    view = null;
    row = view;
    if(view == null)
        row =   layoutInflater.inflate(R.layout.layout_list, viewgroup, false);
    row.setPadding(0, 10, 0, 10);
    listText      = (MusicTextView)row.findViewById(R.id.listLabels);
    listText.setTypeface(Typeface.createFromAsset(
                                                    context.getAssets(),
                                                    "fonts/Roboto-Light.ttf"
    return row;
}

【问题讨论】:

    标签: android listview android-listview


    【解决方案1】:

    由于向下/向上滚动而变得“不可见”的每个项目都将被发送到适配器,以避免再次在内存中创建它(第二个参数),所以基本上你必须再次设置并返回视图.

    无论您向上或向下滚动,都会发生同样的事情,它们将一遍又一遍地发送到适配器。

    另一方面(作为建议),您可以为 (MusicTextView) 使用包装类,并对项目视图使用 setTag() 函数,这样您就可以避免一次又一次地找到它。

    所以视图 -> 标记 -> 包装器 -> 指向 MusicTextView 的指针

    【讨论】:

      【解决方案2】:

      您可以尝试重写此方法以防止视图回收

      @Override
      public int getViewTypeCount() {
          return getCount();
      }
      

      并删除此view = null;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 2021-01-31
        • 1970-01-01
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2013-01-13
        相关资源
        最近更新 更多