AdapterHandler - 抽象类空指针异常

时间:2016-05-22 06:52:52

标签: java android

我在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为空?

1 个答案:

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