SaveInstanceState
对于Integer,Long,String等数据都很好,我只是将其放入包中,并在再次调用onCreateView时将其取回。但是我的 fragment 也有如下的监听器,
public class SomeFragment extends Fragment {
public interface SomeListener {
public void onStartDoingSomething(Object whatItIsDoing, Date when);
public void onDoneDoingTheThing(Object whatItDid, boolean result);
}
private SomeFragmentListener listener;
private String[] args;
public static SomeFragment getInstance(SomeListener _listener, String... _args) {
SomeFragment sf = new SomeFragment();
sf.listener = _listener
sf.args = _args
return sf;
}
// rest of the class
// the example of where do I invoke the listener are
// - onSetVisibilityHint
// - When AsyncTask is done
// - successfully download JSON
// etc.
}
我怎样才能让听众 bundle 在一起,以便以后可以找回它?
最佳答案
最近,我刚刚找到了执行此操作的正确方法,并希望与以后分享该主题的读者分享。
保存 fragment 监听器的正确方法不是保存 fragment ,而是在 fragment 附加到 Activity 时从 Activity 发出请求。
public class TheFragment extends Fragment {
private TheFragmentListener listener;
@Override
public void onAttach(Context context) {
if (context instanceof TheFragmentContainer) {
listener = ((TheFragmentContainer) context).onRequestListener();
}
}
public void theMethod() {
// do some task
if (listener != null) {
listener.onSomethingHappen();
}
}
public interface TheFragmentContainer {
public TheFragmentListener onRequestListener();
}
public interface TheFragmentListener {
public void onSomethingHappen();
}
}
当 fragment 附加到 Activity 上时,我们会检查
关于android - 在onSaveInstanceState中保存接口(interface)(监听器),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21043159/