android - 如何在 ListView Adapter 类中获取 Activity 引用?
问题描述
我试图通过单击需要将 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));
}
这是按钮点击监听器的完整代码。
谢谢你。
解决方案
在 Adapter 类中引用 Activity 是一种不好的方法。应该在 Activity 类中完成的任何事情,例如 UI 更改、显示对话框等,都不应在其他任何地方完成,只能从 Activity 本身完成。
解决方案:
1)创建接口
public interface MyListener {
void doSomething(Params... params);
}
2)在Activity类中实现
class MyActivity extends AppCompatActivity implements MyListener{
new MyAdapter(this);
void doSomething(Params... params){
//Request Permission here
}
}
3)在适配器类中这样使用
class MyAdapter extends .....{
MyListener myListener;
MyAdapter(Context mContext){
if(mContext instanceOf MyListener)
myListener = (MyListener) mContext;
}
void anotherFunction(){
myListener.doSomething(Params... params)
}
}
推荐阅读
- python - 如何从 scikit-learn 的混淆矩阵中返回一组误报?
- android - googleFit 获取每小时计步器更新回调?
- java - 更优化的 if-else 编写方式
- laravel - 想要继续显示日期字段的旧日期吗?
- php - 日历根据显示的日期显示日期,但从当天开始(php,mysql)
- pandas - 结合互补的 DataArrays
- javascript - Paypal Braintree pop 在 chrome 中被阻止
- javascript - d3.csvParse 无法正确读取字符串
- c# - 传递用于强制转换的接口类型作为参数
- r - 使用闪亮 R 中的预测值填充动态表