我在ListView的自定义适配器中有onClickListener
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();
}
}
});
然后我创建了Abstract Class来更新TextView
public abstract class InterfaceUpdate
{ public void updateText(String text){} }
片段中的和Listener更新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(位置).getRadio_name());
不检查它是否为null,因为它会生成NullPointerException 当我第一次点击列表元素时,TextView没有改变,第二次正在改变完美...; /任何想法如何不使这个adapterhandler为空?
答案 0 :(得分:0)
问题是在第一次尝试调用updateText之后才会创建适配器处理程序。 (直到mRadioManager.startRadio
调用onRadioStarted()回调才会调用它)
试试这个(尽管在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());
};