【发布时间】:2019-02-04 03:15:06
【问题描述】:
我正在尝试通过单击需要 Activity 作为第一个参数的按钮从列表适配器类请求电话呼叫权限。
ActivityCompat.requestPermissions(mContext, new String[]{Manifest.permission.CALL_PHONE},1 );
这里的 mContext 是从其中一个活动传递的。但它显示错误:
Wrong 1st argument type. Found: 'android.content.Context', required: 'android.app.Activity'.
我尝试传递每个上下文以及 getParent() 活动,但它不起作用。 有什么方法可以获取 Activity 并在列表适配器中使用它?
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
dialNumber(employee.get(i).getNumber());
}
else
{
Log.i(TAG, "onClick: you don't have permission to call");
ActivityCompat.requestPermissions(mContext, new String[]{Manifest.permission.CALL_PHONE},1 );
}
Log.i(TAG, "onClick: Wroks " + getItemId(i));
}
这是按钮点击监听器的完整代码。
谢谢。
【问题讨论】:
-
ActivityCompat.requestPermissions 实际上需要活动实例而不是上下文。将
mContextContext 的类型更改为Activity。 -
我也试过了,但是不行
-
在您的适配器类中创建一个接口并从活动中传递一个回调。所以在按钮点击回调将来到活动,现在你可以传递任何你想要的上下文。
-
您是在活动中还是在片段中?如果上下文来自一个活动,您可以通过 (Activity) mContext 将其转换为活动
-
@NicolaGallazzi 列出适配器类
标签: android listview android-activity android-context listadapter