通过Listview的孩子进行迭代

时间:2017-08-09 13:59:38

标签: java android

我有一个填充了整数和Listview的ArrayList。现在我想通过这个Arraylist,如果status.get(i) % 2 != 0,我想通过填充TextViews的ListView的相应子项进行攻击。

我的代码:

for(int i = 0; i < mLsitView.getCount(); i++){
            TextView tv = (TextView) mLsitView.getChildAt(i);
            if(mArrayList.get(i) % 2 != 0) {
            tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
           }
        }

当我执行此代码时,它给我一个NullPointerException,告诉我:Attempt to invoke virtual method 'Attempt to invoke virtual method 'int android.widget.TextView.getPaintFlags()' on a null object reference

我已经搜索了互联网,但我找不到解决方案。有人说你应该在循环中使用for (int 1 = 0; i < mLsitView.getFirstVisiblePosition() - mLsitView.getLastVisiblePosition(); i++,但它只是为我返回0并且代码片段没有被执行。

2 个答案:

答案 0 :(得分:2)

你不能这样做,因为列表不会一次创建所有视图,

您可以通过在适配器的getView中添加条件来解决此问题。

答案 1 :(得分:0)

ListViews与常规视图的不同之处在于ListView的子项不会同时存在。 ListViews生成足够的子视图以适应设备的屏幕,加上一些额外的。滚动浏览ListView时,从屏幕顶部消失的子视图为recycled and placed at the bottom again以供重复使用,这样手机就不必经常创建和销毁视图。

要在每个其他视图上设置删除线,您必须创建自定义Adapter。调用适配器时,它还会接收您正在创建的视图的位置,您可以使用它来确定是否绘制删除线。