Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android listview-对不可见项的访问_Android_Android Listview - Fatal编程技术网

Android 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)); } } 但这只适用

我想检查listview上的哪些元素也是另一个列表的成员,并检查所有元素(通过更改背景)。但我能想到的唯一办法是:

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));
            }
       }
}