android中的Activity / Fragment模式

时间:2014-07-24 13:08:54

标签: android design-patterns android-fragments

我的活动主要是:

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)它也会被重置。

我有两个问题:

  1. 我是否使用好的模式来管理我的应用程序。随着时间的推移,包含一个片段的大活动会变得更大
  2. 我应该如何处理方向变更?
  3. 此致

1 个答案:

答案 0 :(得分:1)

我发现这种模式不是更完美或最好的模式,尽管这是Google的建议。因为如果片段知道特定的活动或听众,它可能是一种更糟糕的编码风格,当你想让你的片段更多地了解它的“容器”或“父母”时,你可能会编写越来越多的代码。稍后该片段是否会用于其他未使用IRefreshListener等实现的活动,您将编写更多代码。

我的介绍是使用Otto-Bus或Event-Bus。您可以只从一对一发送消息。每个人都不必相互了解。