我有一个填充了整数和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并且代码片段没有被执行。
答案 0 :(得分:2)
你不能这样做,因为列表不会一次创建所有视图,
您可以通过在适配器的getView
中添加条件来解决此问题。
答案 1 :(得分:0)
ListViews与常规视图的不同之处在于ListView的子项不会同时存在。 ListViews生成足够的子视图以适应设备的屏幕,加上一些额外的。滚动浏览ListView时,从屏幕顶部消失的子视图为recycled and placed at the bottom again以供重复使用,这样手机就不必经常创建和销毁视图。
要在每个其他视图上设置删除线,您必须创建自定义Adapter。调用适配器时,它还会接收您正在创建的视图的位置,您可以使用它来确定是否绘制删除线。