Android listview-对不可见项的访问
我想检查listview上的哪些元素也是另一个列表的成员,并检查所有元素(通过更改背景)。但我能想到的唯一办法是:Android listview-对不可见项的访问,android,android-listview,Android,Android Listview,我想检查listview上的哪些元素也是另一个列表的成员,并检查所有元素(通过更改背景)。但我能想到的唯一办法是: for (String str : list1){ if (list2.contains(str)) { lv.getChildAt(adapter.getPosition(str)).setBackgroundColor(getResources().getColor(android.R.color.darker_gray)); } } 但这只适用
for (String str : list1){
if (list2.contains(str)) {
lv.getChildAt(adapter.getPosition(str)).setBackgroundColor(getResources().getColor(android.R.color.darker_gray));
}
}
但这只适用于列表中的可见元素,并且在访问不可见元素时引发空指针异常。如何将更改应用于所有列表项?我是否必须编写自己的适配器,或者可能有任何“等效”的getChiledAt,但它不仅适用于可见元素,而且适用于listview的所有元素?您可以创建一个新的
列表
,使用(我假设您有)id
,就像listview的
数据一样
例如:
你有一个class
Person
和int-id
,字符串名
。创建一个新的列表
来存储列表视图
的所有(不仅仅是可见的那一个)个人id,通常使用列表视图的适配器
我没有亲自尝试,只是提出了一个建议。请你试试这条路,检查一下
其思想是将setOnScrollListener与onScroll方法一起使用,并在循环内部进行空检查。
但这并不是一个好的解决方案,因为for循环在每个卷轴上都工作
lv.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
for (String str : list1) {
if (list2.contains(str)) {
if (lv.getChildAt(adapter.getPosition(str)) != null) {
lv.getChildAt(adapter.getPosition(str))
.setBackgroundColor(
getResources()
.getColor(
android.R.color.darker_gray));
}
}
}
}
});
解决方案是使用onScroll方法(如Chitrang所建议的),并将所有内容都设置为仅可见项。Android Magic工作正常,一切正常,也适用于不可见的项目:)
@覆盖
public void onScroll(AbsListView视图、int firstVisibleItem、int visibleItemCount、int totalItemCount){
对于(int i=lv.getFirstVisiblePosition();是的,我在考虑这个解决方案。但是在我的情况下,它会有点复杂-我需要很多这样的id列表,我需要在意图之间传递它们,我需要记住哪个列表与哪个意图相连接。我更喜欢没有额外列表的解决方案…我使用了onScroll方法,但有点其他方式。谢谢谢谢你的建议!
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
for (int i = lv.getFirstVisiblePosition(); i<=lv.getLastVisiblePosition(); i++){
if (list2.contains(lv.getItemAtPosition(i).toString()))
lv.getChildAt(i - lv.getFirstVisiblePosition()).setBackgroundColor(getResources().getColor(android.R.color.darker_gray));
}
}
}