仅当没有“呼叫”权限时,我的逻辑才起作用。如果我提供了许可,它就可以正常工作。
我正在尝试在回收器视图中调用Snackbar,原因是我在回收器视图中的按钮之一必须调用Call工具。因此,我正在检查 Manifest.permission.CALL_PHONE 权限,如果没有提供权限,则会显示一个snakbar。在调用以下代码时
private void showSnackbar(MyViewHolder v , final int mainTextStringId, final int actionStringId,
View.OnClickListener listener) {
Snackbar.make(v.snackBarLayout,
context.getString(mainTextStringId),
Snackbar.LENGTH_INDEFINITE)
.setAction(context.getString(actionStringId), listener).show();
}
java.lang.IllegalArgumentException:从 给定的看法。请提供有效的视图。
但是我试图解析我的Viewholder表单
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
....
....
....
showSnackbar(holder,R.string.permission_rationale, android.R.string.ok,
new View.OnClickListener() {
@Override
public void onClick(View view) {
// Request permission
startCallPermissionRequest();
}
});
}
我不认为这是重复的问题,我尝试将快餐栏更改为findviewbyId,但无法获取要显示的视图。视图仅来自ViewHolder。
答案 0 :(得分:2)
您正在将Holder作为Snackbar的父视图
showSnackbar(holder,R.string.permission_rationale, android.R.string.ok,
new View.OnClickListener() {
@Override
public void onClick(View view) {
// Request permission
startCallPermissionRequest();
}
});
在与此适配器类连接的xml内,您需要父视图对象(LinearLayout / RelativeLayout或您提供的任何对象)来代替 holder 。
答案 1 :(得分:0)
最后,我能够解决它,问题在于获取父视图以使其正常工作 view.getRootView()
private void showSnackbar(View v , final int mainTextStringId, final int actionStringId,
View.OnClickListener listener) {
Snackbar.make(view.getRootView().findViewById(android.R.id.content),
context.getString(mainTextStringId),
Snackbar.LENGTH_INDEFINITE)
.setAction(context.getString(actionStringId), listener).show();
}