首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Studio:变量'requiredPermissions‘是从内部类访问的,需要声明为final

Android Studio:变量'requiredPermissions‘是从内部类访问的,需要声明为final
EN

Stack Overflow用户
提问于 2016-07-28 19:16:38
回答 3查看 137关注 0票数 0

我正在处理运行时权限,并试图创建一个方法来显示获取权限的权限理由和理由问题是:“变量'requiredPermissions‘是从内部类中访问的,需要声明为final”

这就是我调用该方法的方式:

代码语言:javascript
复制
       showRationale(R.string.permission_ACCESS_FINE_LOCATION_rationale, new String[]{Manifest.permission.ACCESS_FINE_LOCATION});

这就是方法:

代码语言:javascript
复制
private void showRationale(int rationale, String[] requiredPermissions) {
    Snackbar.make(findViewById(R.id.myCoordinatorLayout), rationale, Snackbar.LENGTH_INDEFINITE)
            .setAction(R.string.go_grant_permission, new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                                                                     // 'requiredPermissions' below causes the problem
                    ActivityCompat.requestPermissions(MapsActivity.this, requiredPermissions, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
                }
            })
            .show();
}
EN

回答 3

Stack Overflow用户

发布于 2016-07-28 19:18:50

您可以通过接口实现onClick,而不是将此变量设为final。

票数 0
EN

Stack Overflow用户

发布于 2016-07-28 19:19:29

这样如何:

代码语言:javascript
复制
private void showRationale(int rationale, final String[] requiredPermissions) {
    Snackbar.make(findViewById(R.id.myCoordinatorLayout), rationale, Snackbar.LENGTH_INDEFINITE)
            .setAction(R.string.go_grant_permission, new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                                                                     // 'requiredPermissions' below causes the problem
                    ActivityCompat.requestPermissions(MapsActivity.this, requiredPermissions, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
                }
            })
            .show();
}
票数 0
EN

Stack Overflow用户

发布于 2016-07-28 19:20:24

问题是局部变量(和方法参数)必须是final才能在像OnClickListener这样的内部类中被访问。因此,您应该在参数声明之前添加final关键字。要执行此操作,请更改此行

代码语言:javascript
复制
private void showRationale(int rationale, String[] requiredPermissions) {

代码语言:javascript
复制
private void showRationale(int rationale, final String[] requiredPermissions) {

请阅读有关此主题here的更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38634805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档