我希望在这里解决的问题是,当我点击ListView
中的一个项目时,该项目的背景变为浅灰色,但是当我继续滚动列表时,每个第四个项目的背景都变为浅灰色,即使其他项目没有被点击。如何仅通过点击使我点击的项目生效?
ListView lv = (ListView) findViewById(R.id.resultsList);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.resultitem, (String[])labelList.toArray(new String[labelList.size()])));
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tv = (TextView)view.findViewById(R.id.result);
tv.setBackgroundColor(Color.LTGRAY);
tv.setTextColor(Color.BLACK);
}
}
答案 0 :(得分:1)
您必须在ListAdapter的子类中重写getView()
,在本例中为ArrayAdapter。
这是因为Android实际上重用了行来节省资源和CPU(当一行从屏幕上滚动时,它会被重新用于进入视图的新行)。因此,如果您将背景设置为灰色,则可能最终会再次使用,背景仍为灰色。
如果你是ArrayAdapter的子类,你可以让你的onItemClickListener设置某种标志,然后你的ArrayAdapter的getView()
,你可以根据标志设置适当的背景颜色。
This link有一个子类化ArrayAdapter
的例子答案 1 :(得分:0)
我想您正在使用转换视图,就像这样
...public View getView(int position, View convertView, ViewGroup parent) { ....
你正在改变它在第四个位置的背景,你的视图说在一个页面上有6行,所以每个页面的每第4行都会因为重复使用相同的convertView而变灰。
我不知道我正在解释正确,但如果您正在使用convertview并更改其布局,那么您应该有逻辑重新创建该布局以避免重复使用相同(缓存)视图。