android中的活动/片段模式
我有一项活动,基本上是:android中的活动/片段模式,android,design-patterns,android-fragments,Android,Design Patterns,Android Fragments,我有一项活动,基本上是: public class FragmentContainer extends FragmentActivityBase implements IRefreshListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getIntent().getExtras() == n
public class FragmentContainer extends FragmentActivityBase implements IRefreshListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getExtras() == null
|| getIntent().getExtras().get("type") == null) {
showProductList();
}
else
{
if (getIntent().getExtras().get("type").equals("customer"))
showCustomerList();
}
@Override
public void showProductList() {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
// load the product list
ProductList fragment = new ProductList();
fragmentTransaction.replace(R.id.fragment_container, fragment)
.addToBackStack(null);
fragmentTransaction.commit();
}
.....
}
在片段中,我使用onCreateView获得意图,然后创建视图。
如果需要更改片段,我将获得对父活动的引用(取自onAttach),并调用IRefreshListener引用的方法
比如:
IRefreshListener mCallback;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception.
try {
mCallback = (IRefreshListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement IRefreshListener");
}
}
public void callCustomer() {
mCallback.showCustomerList();
}
它可以工作,但是当我改变方向时,即使我使用setRetainInstance(true),它也会被重置
我有两个问题:
关于我不认为这种模式更完美或最好,尽管它是或曾经是谷歌的建议。因为如果片段知道特定的活动或侦听器,这可能是一种更糟糕的编码方式,所以当您想让片段更多地了解其“容器”或“父对象”时,您可能会编写越来越多的代码。如果该片段稍后将用于其他未使用IRefreshListener等实现的活动,您将编写更多代码 我的介绍是使用Otto总线或事件总线。你可以把信息从一个发送到另一个。每个人都不必互相了解