繁体   English   中英

Recycler 视图中的 Snackbar

[英]Snackbar inside Recycler view

我的逻辑仅在没有 Call 许可时才起作用,如果我提供了许可,它就可以正常工作。

我试图在我的回收站视图中调用 Snackbar,Reason 作为我在回收站视图中的按钮之一必须调用 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。

您将持有人作为 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 或您提供的任何内容)而不是持有人

最后我能够解决它,问题是获取父视图我这样做是为了让它工作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();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM