大家好我想问一下,如果我在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();
}
}
答案 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()。它是一种很好的编码实践,可以减少编程错误。