2017-08-09 4 views
0

私は、整数とリストビューでいっぱいのArrayListを持っています。今、私はこのArraylistを手に入れたいと思っています。もしstatus.get(i) % 2 != 0なら、私はTextViewsでいっぱいのListViewの子を打ちたいと思っています。Listviewの子を反復する

マイコード:Attempt to invoke virtual method 'Attempt to invoke virtual method 'int android.widget.TextView.getPaintFlags()' on a null object referenceを:私はこのコードを実行すると、そのは私に言って、私にNullPointerExceptionが与え

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

私は既にインターネットを検索しましたが、解決策が見つかりませんでした。誰かがループ内でfor (int 1 = 0; i < mLsitView.getFirstVisiblePosition() - mLsitView.getLastVisiblePosition(); i++を使うべきだと言いましたが、それは私のために0を返し、コードの部分は実行されません。

リストは、あなたがあなたのアダプタで getViewにあなたの条件を置くことで、この問題を解決することができ、ワンショットで

をすべてのビューを作成することはありませんので、あなたがそのようなことができない

答えて

0

リストビューは、ListViewの子がすべて一度に存在するわけではないという点で、通常のビューとは異なります。 ListViewは、デバイスの画面に収まるだけの子ビューを生成します。 ListViewをスクロールすると、画面の上部に表示されなくなる子ビューはrecycled and placed at the bottom againとなり、電話機は常にビューを作成して破棄する必要はありません。

他のすべてのビューで取り消し線を適用するには、カスタムAdapterを作成する必要があります。アダプタが呼び出されると、作成しているビューの位置も取得され、それを使ってストライクスルーをペイントするかどうかを判断できます。

+0

答えのTy! – Sarius

2

+0

私はあなたのことを理解していません。初心者が理解できるように説明できますか? – Sarius

+0

リストアダプター(カスタムリストアダプター)に移動し、getView()メソッドがあることを確認します。その場合は、とにかくTextViewを取得します。その位置に基づいて変更できます。 –

+0

私はカスタムアダプターを持っていない、ちょうどArrayAdapterを使用して... – Sarius