我的活动主要是:
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获取意图,然后创建我的视图。
如果我需要更改片段,我将获得对父Activity的引用(取自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)它也会被重置。
我有两个问题:
此致
答案 0 :(得分:1)
我发现这种模式不是更完美或最好的模式,尽管这是Google的建议。因为如果片段知道特定的活动或听众,它可能是一种更糟糕的编码风格,当你想让你的片段更多地了解它的“容器”或“父母”时,你可能会编写越来越多的代码。稍后该片段是否会用于其他未使用IRefreshListener等实现的活动,您将编写更多代码。
我的介绍是使用Otto-Bus或Event-Bus。您可以只从一对一发送消息。每个人都不必相互了解。