接口变量变为null

时间:2015-10-23 07:07:28

标签: java android

所以,我知道这不是一个好习惯,但我有一个扩展ArrayList的类。 我这样做有一个ArrayList,它能够告诉其他组件(适配器等)它的数据已经改变。

像这样:

public class ListenableArrayList<T> extends ArrayList<T> implements Listenable<T>{
    private ListListener<T> listener;

    @Override
    public void setListener(ListListener<T> listener){
        this.listener = listener;
    }

    @Override
    public boolean add(T object){
        boolean b = super.add(object);
        if (listener != null){
            listener.onChange();
        } else{
           Log.d("ListListener", "Listener is null");  
        }

        return b;
    }
        //I also overwrite remove(Object object) and remove(int index) on the same way
}

public interface Listenable<T> {
    void setListener(ListListener<T> listener);
}

public interface ListListener<T> {
    void onChange();
}

每次在我的区域(BroadcastReceiver)中找到新的BluetoothDevice时,我都会调用add,然后在RecyclerView.Adapter中获取ListenableArrayList。

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements ListListener{

    public RecyclerAdapter(Context context){
        ....
        this.deviceList = MyApp.getInstance().getManager().getDeviceList;

        this.deviceList.setListener(this);

    }

    @Override
    public void onChange() {
        deviceList = MyApp.getInstance().getManager().getDeviceList();

        listAdapter.notifyDataSetChanged();
        Log.d("ListListener", "adapter listener listened");
    }
}

调试时我发现第一次添加onChange被调用,之后我的侦听器为null。我不知道我做错了什么:/

0 个答案:

没有答案