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 上时,我们会检查
  • ,我们检查 Activity 是否实现TheFragmentContainer
  • (如果有 Activity ),请从 Activity 请求监听器。
  • 关于android - 在onSaveInstanceState中保存接口(interface)(监听器),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21043159/

    10-13 05:08