滚动时删除ListView自定义drawable

时间:2014-10-16 02:31:27

标签: android listview android-listview

我为listview创建了一个自定义选择器,它使用drawable更改列表项的背景颜色。我以前在滚动时有背景颜色扩展到列表中的随机视图的问题,我通过使适配器中的视图始终为null来修复此问题但是当我滚动时,一旦项目不再可见,则设置的背景颜色它不再存在,它就像它不记得它一样。这可能是因为视图始终为null?

我基本上想要更改所选项目而不影响列表中的其他项目,滚动时,应记住更改的项目。

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;
}

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

您可以尝试覆盖此方法以防止视图回收

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

并删除此view = null;