Android onRequestPermissionsResult super实用程序

wj8zmpe1  于 2023-06-20  发布在  Android
关注(0)|答案(2)|浏览(165)

当我使用onRequestPermissionsResult()时,保留super方法有用吗?

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

如果我们看一下超级方法

@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方法吗?

ndh0cuux

ndh0cuux1#

在处理super方法时,通过查看其源代码来检查它在做什么。(Ctrl +单击)。
在本例中,类FragmentActivityAppCompatActivity的父类)的方法onRequestPermissionsResult具有将结果转发到其片段的代码。所以如果你需要在片段中的结果,这是必要的,否则你可以删除超级调用。另外,如果您直接使用Activity类进行Activity,则可以将其删除。
Fragment的情况下,方法onRequestPermissionsResult没有主体。所以你可以删除超级调用。

hmae6n7t

hmae6n7t2#

不调用.super()不再是一个选项。不知道这是什么版本,但Android Studio现在坚持为AppCompatActivity的任何子类调用.super()
奇怪的是,即使有这个错误,代码仍然编译和运行!我猜这是为了避免破坏旧的密码在不久的将来查找编译器错误。

Lesson:调用.super()。看来Google真的想让你这么做。

相关问题