我试图在 Android 应用程序中创建一个简单的 ListView
并更改 View 的背景颜色。
我通过简单地覆盖已定义的 ArrayAdapter
类的 getView()
方法并在其中进行更改而成功。
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, Categories) {
@Override
public View getView(int pos, View v, ViewGroup vg) {
View view = super.getView(pos, v, vg);
switch (pos) {
case 0:
view.setBackgroundColor(Color.RED);
break;
case 1:
view.setBackgroundColor(Color.BLUE);
break;
default:
break;
}
return view;
}
};
但是,如果我删除 switch 语句并在此函数之外使用返回 View ,颜色不会更新。我的意思是这样的:(lv
是我的 ListView
)
lv.setAdapter(arrayAdapter);
for (int i=0; i<2; ++i) {
View V = (View) lv.getAdapter().getView(i, null, lv);
switch (i) {
case 0:
V.setBackgroundColor(Color.RED);
break;
case 1:
V.setBackgroundColor(Color.BLUE);
break;
default:
break;
}
}
它确实返回了对 View 的引用,那么为什么它不能那样工作呢?
最佳答案
每当你改变一些东西时调用:
ArrayAdapter.notifyDataSetChanged();
无论如何,这不是英国人的好方法,但我想每个解决方案都是一个解决方案¯_(ツ)_/¯
关于android - 关于从 ListView 中检索 View 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46469367/