2016-05-22 55 views
-1

我有onClickListener在我的自定义适配器的ListViewAdapterHandler - 抽象类空指针异常

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

     } 
    }); 

然后我做了抽象类更新的TextView

public abstract class InterfaceUpdate 

{ 公共无效UPDATETEXT(字符串文本) {} }

和更新TextView中的监听器:

@Override 
public void onRadioStarted() { 

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

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

     } 
    }; 

我的问题是什么?我无法制作

adapterhandler.updateText(dataModelList.get(position).getRadio_name());

不检查它是否为空,因为它生成NullPointerException 当我第一次点击列表元素,TextView没有改变,第二次改变完美...; /任何想法如何不使这个adapterhandler为空?

+0

你为什么要调用'super.updateText(text)'?你知道它什么都不做。 – Tibrogargan

+0

它只是垃圾代码,刚刚删除...问题是,我打电话时这个updateText播放时,但第一次它不播放;) 认真,我不知道该把它放在哪里,它应该更新为元素点击列表(TextView) 我不能把它放在onCreate等,因为它将为空。嗯... 现在,当我第一次点击,没有什么可做的,TextView没有更新。点击第二次,处理程序和文本不为空,收音机正在播放,所以它正在改变。 – ramzixp

回答

0

问题是,您的adapterhandler只有在您第一次尝试并调用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()); 
};