繁体   English   中英

什么时候调用 super.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 方法呢?

在片段中:这并不重要,因为您的片段将处理结果,之后没有其他事情可做。 您不必调用 super 方法,因为它是空的。
在 FragmentActivity 中:如果您在包含片段的活动中覆盖它,那么您应该调用 super 方法将结果传递给片段。 如果你愿意,你可以在这样做之前做一些逻辑,但我想不出你想在活动中做什么,而不是片段。 不过我写的Android代码并不多。

排序似乎无关紧要,但在 FragmentActivity 中,我会坚持在 Activity 执行其中间逻辑后调用 super.onActivityResult。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM