我正在我的程序中实现一个继承自“ListFragment”的片段。这是因为我打算显示一个项目列表。
我创建了一个适配器并调用了方法“setListAdapter(ListAdapter)”来设置适配器:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
(...)
ArrayAdapter<MyClass> adapter =
new ArrayAdapter<MyClass>(getActivity(),
android.R.layout.simple_list_item_1,
mMyClass);
setListAdapter(adapter);
}
现在我决定回复用户触摸任何视图。我通过重写ListFragment的便捷方法 onListItemClick(...)实现了这一点:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
v.setBackgroundColor(Color.GREEN);
}
请注意此代码的简单性:我只是将该视图的背景颜色更改为绿色。我决定在Android 4.4.2手机上运行代码并发现一个非常奇怪的行为:
视图的背景颜色DO变为绿色。但是......不仅视图的背景颜色,而且列表中的其他(随机选择的?)视图也是如此。
假设我的ListView中有100个视图(从0到99)。如果我点击视图#0,不仅视图的背景颜色会改变,而且视图#13,视图#26,视图#39,...视图#91的背景颜色也会改变,它们是均匀分布的。但为什么呢?
如果我要高速向下滚动列表(快速移动我的手指,通过非常快速的视图),那么我之前提到的视图将再次变为白色,而其他视图将变为绿色。
你可以在家里试试这个,看看会发生什么。
对此有何合理解释? Android reference明确表示onListItemClick的 v 参数为:
在ListView中单击的视图
由于