0

リサイクラービューをスクロールして、リサイクルビューの特定のアイテムの背景をアンドロイドTTSエンジンに同期してスクロールしようとしています。問題はありますが、ビューにあまりにも多くのアイテムがあるとすぐに、変化するバックグラウンド・ブレーク(NPE)が発生します。リサイクラ・ビューが子供を破壊する方法があると考えていますが、初心者です。スクロールリサイクラースクロールリサイクラービューと子バックグラウンドでヌルポインター例外が発生する

SpeakGridDB.recyclerView.getLayoutManager() 
.getChildAt(cardCountPosition).setBackgroundResource 
(R.drawable.selected_blue_border); 
0 @

public void onInit(int initStatus) { 
    if (initStatus == TextToSpeech.SUCCESS) { 
     myTTS.setLanguage(Locale.UK); 
     //myExclusiveTTS.setLanguage(Locale.UK); 
     myExclusiveTTS.setOnUtteranceProgressListener(new UtteranceProgressListener() { 
       @Override 
       public void onDone(String utteranceId) { 

        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          System.out.println("onDone " + cardCountPosition +" list size " + SpeakGridDB.cardMakerList.size()); 
          SpeakGridDB.recyclerView.getLayoutManager().getChildAt(cardCountPosition).setBackgroundResource(R.drawable.border); 
          cardCountPosition ++; 
          if(cardCountPosition == SpeakGridDB.cardMakerList.size()){ 
           System.out.println("onDone if " + cardCountPosition +" list size " + SpeakGridDB.cardMakerList.size()); 
           cardCountPosition = 0; 

          } 
         } 
        }); 

       } 

       @Override 
       public void onError(String utteranceId) { 
       } 

       @Override 
       public void onStart(String utteranceId) { 
        System.out.println("onStart " + cardCountPosition +" list size " + SpeakGridDB.cardMakerList.size()); 
        moveView(); 
       } 
      }); 

    } else if (initStatus == TextToSpeech.ERROR) { 
     Toast.makeText(this, "Oops sorry! Text To Speech failed... SimpleAAC cannot fix this", Toast.LENGTH_LONG).show(); 
    } 
} 

public void moveView(){ 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      if (cardCountPosition < SpeakGridDB.cardMakerList.size()){ 
       SpeakGridDB.recyclerView.getLayoutManager() 
         .smoothScrollToPosition(SpeakGridDB.recyclerView, null, cardCountPosition + 1); 
       SpeakGridDB.recyclerView.getLayoutManager().getChildAt(cardCountPosition).setBackgroundResource(R.drawable.selected_blue_border); 

      } 
      else{ 
       //this never gets called 
       cardCountPosition = 0; 
      } 

     } 
    }); 
} 

私のNPEはmoveView方法から来ビュー

私は唯一のビューで1,2,3または4のアイテムを持っている場合、それはせずに動作する失敗し、私のプリントアウトが画面に収まるどのように多くの項目については(この

I/System.out: onStart 0 list size 3 
I/System.out: onDone 0 list size 3 
I/System.out: onStart 1 list size 3 
I/System.out: onStart 1 list size 3 
I/System.out: onDone 1 list size 3 
I/System.out: onDone 2 list size 3 
I/System.out: onDone if 3 list size 3 

任意の4つ以上のように見えます)誰もが私は

答えて

0

は、私が今

SpeakGridDB.recyclerView.findViewHolderForAdapterPosition 
(cardCountPosition).itemView.setBackgroundResource(R.drawable.border); 
を使用している別のポストにこれに対する答えを見つけたビューの背景リソースを設定する前にチェックする必要がある何かを提案することができNPEとクラッシュしているが、私のプリントアウトは同じに見えます

番号を取るビュー内のビューのみをカウントするアダプタではなく、ビューホルダから取得

関連する問題