Android的onRequestPermissionsResult超级实用工具

8
当我使用onRequestPermissionsResult()时,保留super方法是否有用?
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

如果我们看一下super方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
        @NonNull int[] grantResults) {
    mFragments.noteStateNotSaved();
    int index = (requestCode >> 16) & 0xffff;
    if (index != 0) {
        index--;

        String who = mPendingFragmentActivityResults.get(index);
        mPendingFragmentActivityResults.remove(index);
        if (who == null) {
            Log.w(TAG, "Activity result delivered for unknown Fragment.");
            return;
        }
        Fragment frag = mFragments.findFragmentByWho(who);
        if (frag == null) {
            Log.w(TAG, "Activity result no fragment exists for who: " + who);
        } else {
            frag.onRequestPermissionsResult(requestCode & 0xffff, permissions, grantResults);
        }
    }
}

我真的不太明白super方法的意义,可能只是为了日志记录而已吧?
我能安全地在任何地方删除super方法吗?

1
这是在Fragment中处理权限请求的方法。如果你没有从任何Fragment中请求权限,那么在Activity中你就不必调用super方法。 - Mike M.
2个回答

4
当你处理super方法时,通过查看其源代码来检查它正在做什么。(Ctrl + 单击)。
在你的情况下,类FragmentActivityAppCompatActivity的父类)的方法onRequestPermissionsResult具有将结果转发到其片段的代码。因此,如果您需要片段中的结果,则必须这样做,否则可以删除super调用。此外,如果您直接使用Activity类作为您的活动,则可以将其删除。
Fragment的情况下,方法onRequestPermissionsResult没有主体。所以你可以删除super调用。

2

不调用.super()不再是一个选项了。我不知道这个变化是从哪个版本开始的,但Android Studio现在坚持要求对任何AppCompatActivity的子类调用.super()

奇怪的是,即使有这个错误,代码仍然可以编译和运行!我猜这是为了避免老代码出问题。在不久的将来,请留意编译器错误。

教训:调用.super()。看起来谷歌真的想让你这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接