问题:当LoginActivity登陆后,向MainActivity中的Fragment返回登陆状态,然后加载一些信息。
从问题上看回调可以解决。
回调实现(失败)
在LoginActivity定义一个接口,登陆成功后调用回调方法。
MainActivity实现回调方法,但是在注册回调事件的时候,不知道怎么获取LoginActvity的引用。
参考上面这篇观察者模式,顺便学习一下观察者模式,实现BaseObserverFragment,让
public abstract class BaseObserverFragment extends Fragment {
private FragmentEventObserver fragmentEventObserver;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
fragmentEventObserver=new FragmentEventObserver(this);
registerObserver(fragmentEventObserver);
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onDestroy() {
super.onDestroy();
removeObserver(fragmentEventObserver);
}
public void registerObserver(EventObserver observer){
//获取所有需要监听的业务类型
final String[] observerEventTypes=getObserverEventType();
if (observerEventTypes!=null&&observerEventTypes.length>0){
final EventSubject eventSubject=EventSubject.getInstance();
eventSubject.registerObserver(observer);
}
}
public void removeObserver(EventObserver observer) {
//获取所有需要监听的业务类型
final String[] observerEventTypes=getObserverEventType();
if(observerEventTypes!=null && observerEventTypes.length>0){
final EventSubject eventSubject=EventSubject.getInstance();
eventSubject.removeObserver(observer);
}
}
protected abstract void onChange(String eventType);
/**
* 通过这个方法来告诉具体的观察者需要监听的业务类型
* @return
*/
protected abstract String[] getObserverEventType();
private static class FragmentEventObserver extends EventObserver {
//添加弱引用,防止对象不能被回收
private final WeakReference<BaseObserverFragment> mFramgent;
public FragmentEventObserver(BaseObserverFragment framgnet) {
super();
mFramgent =new WeakReference<>(framgnet);
}
@Override
public void onChanged(String eventType) {
BaseObserverFragment fragment= mFramgent.get();
if (fragment!=null){
fragment.onChange(eventType);
}
}
}
}
LoginActivity登陆成功后调用
Notify.getInstance().NotifyActivity(EventType.SHOW_FRIENDS);
这样当登陆时,就能够获得登陆的状态