![](/img/trans.png)
[英]Is there a need to use super.onActivityResult() in onActivityResult()?
[英]when to call super.onActivityResult?
当您覆盖 Android 活动中的方法时,您什么时候需要调用super.overridingMethod()
方法以及您如何知道该调用的位置(开始、结束、可选)? 我写了一个android活动。
例如, OnActivityResult
我看到有时在第一行调用super.onActivityResult
,有时在super.onActivityResult
调用,有时super.onActivityResult
不调用。
这取决于您的需要,如果您希望 Super 类方法为您的子活动做一些重要的工作,则在第一行调用,否则在第一行不需要,
如果你对超类方法的实现不感兴趣,那么你可以在任何地方调用它,但理想情况下我们应该给一个机会让超类方法的实现首先运行。
我也想知道这个。 如果您将Activity
子类化,则 super 方法执行以下操作:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
没有。
如果你子类化AppCompatActivity
,它子类化FragmentActivity
,它会:
/**
* Dispatch incoming result to the correct fragment.
*/
@Override
@CallSuper
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
mFragments.noteStateNotSaved();
int requestIndex = requestCode>>16;
if (requestIndex != 0) {
requestIndex--;
String who = mPendingFragmentActivityResults.get(requestIndex);
mPendingFragmentActivityResults.remove(requestIndex);
if (who == null) {
Log.w(TAG, "Activity result delivered for unknown Fragment.");
return;
}
Fragment targetFragment = mFragments.findFragmentByWho(who);
if (targetFragment == null) {
Log.w(TAG, "Activity result no fragment exists for who: " + who);
} else {
targetFragment.onActivityResult(requestCode & 0xffff, resultCode, data);
}
return;
}
ActivityCompat.PermissionCompatDelegate delegate =
ActivityCompat.getPermissionCompatDelegate();
if (delegate != null && delegate.onActivityResult(this, requestCode, resultCode, data)) {
// Delegate has handled the activity result
return;
}
super.onActivityResult(requestCode, resultCode, data); // This just calls that empty method above on `Activity`
}
它将“将传入结果分派到正确的片段”。 . 这是因为您可能已经从一个片段开始了活动,如果没有这个,只有活动的onActivityResult
被回调。
在片段中:这并不重要,因为您的片段将处理结果,之后没有其他事情可做。 您不必调用 super 方法,因为它是空的。
在 FragmentActivity 中:如果您在包含片段的活动中覆盖它,那么您应该调用 super 方法将结果传递给片段。 如果你愿意,你可以在这样做之前做一些逻辑,但我想不出你想在活动中做什么,而不是片段。 不过我写的Android代码并不多。
排序似乎无关紧要,但在 FragmentActivity 中,我会坚持在 Activity 执行其中间逻辑后调用 super.onActivityResult。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.