所以,我知道这不是一个好习惯,但我有一个扩展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。我不知道我做错了什么:/