2016-05-22 10 views
-1

私はListViewコントロールAdapterHandler - 抽象クラスNULLポインタ例外

holder.name.setText(dataModelList.get(position).getRadio_name()); 

    final ViewHolder finalHolder = holder; 
    holder.name.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      if(adapterhandler !=null) { 
       adapterhandler.updateText(dataModelList.get(position).getRadio_name()); 
      } 

      if(!mRadioManager.isPlaying()) { 

       mRadioManager.connect(); 
       mRadioManager.startRadio(dataModelList.get(position).getRadio_url()); 

      } 
      else 
      { 
       mRadioManager.stopRadio(); 
      } 

     } 
    }); 

のための私のカスタム・アダプタでonClickListenerは、その後、私はTextViewの

public abstract class InterfaceUpdate 

{ ます。public void UPDATETEXT(文字列テキスト)を更新する抽象クラスを作ってい{} }

フラグメントをリスナーで更新するTextView:

@Override 
public void onRadioStarted() { 

    adapter.adapterhandler = new InterfaceUpdate() { 
     @Override 
     public void updateText(String text) { 

      super.updateText(text); 
      title.setText(text); 

     } 
    }; 

私の問題は何ですか?私はできません

アダプターハンドラー.updateText(dataModelList.get(position).getRadio_name());

NullPointerExceptionが生成されているため、NullPointerExceptionが生成されているため、チェックされずに リスト要素を最初にクリックするとTextViewが変更されず、2番目の時間が完全に変更されます... /このアダプタハンドラーをnullにしない方法

+0

なぜ 'super.updateText(text)'を呼びますか?あなたは何もしないことを知っている。 – Tibrogargan

+0

ちょうど削除されたゴミ箱のコードです...問題は、ラジオが再生されているが最初に再生していないときにこのupdateTextを呼び出していることです) 真剣に、私はそれを置く場所を知らないので、 (TextView) nullになるため、onCreateなどに入れることはできません。うーん... 今のところ私が最初にクリックしたときは何もしませんが、TextViewは更新されません。もう一度クリックすると、ハンドラとテキストがヌルではなく、ラジオが再生されているので、正しく変更されています。 – ramzixp

答えて

0

アダプターハンドラーは、初めてupdateTextを試してみるまで作成されていません。 (onRadioStarted()コールバックがmRadioManager.startRadioによって呼び出されるまで、それが呼び出されていない)

(onClickの中であなたのハンドラを構築することは素晴らしいデザインではありませんが)

holder.name.setText(dataModelList.get(position).getRadio_name()); 

final ViewHolder finalHolder = holder; 
holder.name.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (null == adapterhandler) { 
      adapterhandler = new InterfaceUpdate() { 
       @Override 
       public void updateText(String text) { 
        title.setText(text); 
       } 
      } 
     } 
     adapterhandler.updateText(dataModelList.get(position).getRadio_name()); 
     if(!mRadioManager.isPlaying()) { 
      mRadioManager.connect(); 
     } else { 
      mRadioManager.stopRadio(); 
     } 
    } 
}); 

これを試してみて、あなたのonRadioStartedを変更:

@Override 
public void onRadioStarted() { 
    mRadioManager.startRadio(dataModelList.get(position).getRadio_url()); 
};