我为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;
}
答案 0 :(得分:0)
因为向下/向上滚动而变为“不可见”的每个项目都将被发送到适配器,以避免再次在内存中创建它(第二个参数),所以基本上你必须再次设置并返回视图
同样的事情会发生,无论你向上或向下滚动它们都会一遍又一遍地发送到适配器。
另一方面(作为建议),您可以使用(MusicTextView)的包装类并使用setTag()函数到项目视图,这样您就可以避免一次又一次地找到它。
所以视图 - >标签 - >包装 - >指向MusicTextView的指针
答案 1 :(得分:0)
您可以尝试覆盖此方法以防止视图回收
@Override
public int getViewTypeCount() {
return getCount();
}
并删除此view = null;