0
WeakHashMapでAndroidにオブザーバパターンを実装しようとしています。ここでコード。WeakHashMapがオブザーバパターンで期待どおりに動作しない
public class DataObservable {
static WeakHashMap<DataObserver, Class> observers = new WeakHashMap<>();
public static void addObserver(DataObserver observer, Class dataclass) {
observers.put(observer, dataclass);
}
public static void notifyDataChanged(Class dataclass, Result result) {
for (Map.Entry<DataObserver, Class> entry : observers.entrySet()) {
DataObserver observer = entry.getKey();
Class observerDataClass = entry.getValue();
if (observerDataClass == dataclass) {
observer.updateData(dataclass, result);
}
}
}
}
public interface DataObserver {
void updateData(Class dataclass, Result result);
}
public MyFragment extends Fragment{
private DataObserver couponsObserver = new DataObserver() {
@Override
public void updateData(Class dataclass, Result result) {
Log.d("d", "sdg");
}
} ;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sales_coupons, container, false);
DataObservable.addObserver(couponsObserver, SalesCoupon.class);
return view;
}
}
問題は、デバイスiはviewメソッドは新しいオブザーバーを追加作成のWeakHashMapオブザーバーは自動的に削除され、中にdidntのことを期待して回転させることです。 したがって、最初の回転オブザーバーには2つの要素が含まれ、次の回転後には3などとなりますが、それは1になると思います。何が問題なのですか?