在super.method之前或在android中的super.method之后的逻辑是什么?

时间:2014-12-09 07:02:56

标签: android methods super

大家好我想问一下,如果我在super.onDestroyView()之前写了什么东西有什么区别;并在super.onDestroyView()之后;见下面的例子

  

在super.ondestoryview();

之前删除片段
@Override
    public void onDestroyView() {

        try {
            Fragment fragment = (getFragmentManager()
                    .findFragmentById(R.id.mapviews));
            FragmentTransaction ft = getActivity().getSupportFragmentManager()
                    .beginTransaction();
            ft.remove(fragment);
            ft.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.onDestroyView();
    }
  

在super.ondestoryview();

之后删除片段
@Override
    public void onDestroyView() {
        super.onDestroyView();
        try {
            Fragment fragment = (getFragmentManager()
                    .findFragmentById(R.id.mapviews));
            FragmentTransaction ft = getActivity().getSupportFragmentManager()
                    .beginTransaction();
            ft.remove(fragment);
            ft.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

5 个答案:

答案 0 :(得分:4)

如果super是Fragment,那么你的工作方式没有区别,因为Fragment的onDestroyView什么都不做。但在某些情况下,这很重要。

正如Dianne Hackborn所说:

  

一般规则:在任何类型的初始化过程中,让超类先做好自己的工作;在任何类型的定稿期间,您都要先完成工作

P.S。恕我直言,从其他Fragment的onDestroyView方法中删除片段并不是一个好的解决方案。这很奇怪,我认为你应该找到更好的地方来管理你的碎片......

答案 1 :(得分:0)

有用的回答

案例1:如果有一些代码在super.onDestroyView中编写,那么该代码将在您编写的代码之后执行。

案例2:如果在super.onDestroyView中编写了一些代码,那么首先执行该代码,然后执行您编写的代码。

答案 2 :(得分:0)

以下是Fragment.java onDestroyView()的文档:

/**
 * Called when the view previously created by {@link #onCreateView} has
 * been detached from the fragment.  The next time the fragment needs
 * to be displayed, a new view will be created.  This is called
 * after {@link #onStop()} and before {@link #onDestroy()}.  It is called
 * <em>regardless</em> of whether {@link #onCreateView} returned a
 * non-null view.  Internally it is called after the view's state has
 * been saved but before it has been removed from its parent.
 */
@CallSuper
public void onDestroyView() {
    mCalled = true;
}

该文档的重要部分是:Internally it is called after the view's state has been saved but before it has been removed from its parent.

如果您的onDestroy()方法不需要对要保存的视图进行任何更改,那么我认为在您致电super()时无关紧要。

答案 3 :(得分:0)

你的代码应该一般在原定的工作完成后完成它的工作 - 这里需要注意的是,super的工作是否会改变你想要使用的任何状态。也就是说,它确实归结为具体情况 - 阅读超级代码 - 有时那些已经超越其他东西了。

答案 4 :(得分:0)

一旦完成清理处理,就应该调用

super的onDestroy()。它是一种很好的编码实践,可以减少编程错误。