【发布时间】:2014-01-10 11:27:28
【问题描述】:
保存实例状态
对于 Integer、Long、String 等数据都可以,我只需将其放入包中,并在再次调用 onCreateView 时将其取回。但是我的片段也有如下监听器,
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.
}
我怎样才能让监听器捆绑,以便我以后可以取回它?
【问题讨论】:
-
为什么要这样做,持有监听器对象的原因是什么??
-
这个片段被活动在多个地方使用。每个活动对这个回调的反应不同,所以我认为这是一个合适的设计模式,你有其他推荐的模式吗?
-
好吧,如果它是一个监听器,我猜它是一个接口,并且对于您想要监听器的每个活动,您可以在该类中实现监听器并为每个活动单独定义功能。
-
但是,这又回到了我原来的问题,如何保存状态或监听器和委托之间的引用?
-
你不需要保留监听器,它会在活动重新创建时注册,实现监听器使其成为活动/类的一部分
标签: android activity-lifecycle fragment-lifecycle