Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中的活动/片段模式_Android_Design Patterns_Android Fragments - Fatal编程技术网

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总线或事件总线。你可以把信息从一个发送到另一个。每个人都不必互相了解