简体   繁体   English

Recycler 视图中的 Snackbar

[英]Snackbar inside Recycler view

My logic doesn't work only when there is not permission for Call, If i have provided permission it works perfectly fine.我的逻辑仅在没有 Call 许可时才起作用,如果我提供了许可,它就可以正常工作。

I am trying to invoke Snackbar inside my recycler view, Reason being one of my button in recycler view has to invoke Call facility.我试图在我的回收站视图中调用 Snackbar,Reason 作为我在回收站视图中的按钮之一必须调用 Call 工具。 Hence i am checking for Manifest.permission.CALL_PHONE permission and displaying a snakbar if there is no permission provided.因此,我正在检查Manifest.permission.CALL_PHONE权限,如果没有提供权限,则显示一个 snakbar。 While invoking the below code在调用以下代码时

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: No suitable parent found from the given view. java.lang.IllegalArgumentException: 从给定的视图中找不到合适的父级。 Please provide a valid view.请提供有效视图。

However i am trying to parse my Viewholder form但是我正在尝试解析我的 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();
                                        }
                                    });
}

Response to suggested duplicate对建议重复的回应

I don't think this is a duplicate question, I tried changing snackbar to findviewbyId, It is not able to fetch that view to display.我不认为这是一个重复的问题,我尝试将零食栏更改为 findviewbyId,但无法获取要显示的视图。 view comes only from ViewHolder.视图仅来自 ViewHolder。

You are putting holder as parent view for Snackbar您将持有人作为 Snackbar 的父视图

 showSnackbar(holder,R.string.permission_rationale, android.R.string.ok,
                                new View.OnClickListener() {
                                    @Override
                                    public void onClick(View view) {
                                        // Request permission
                                        startCallPermissionRequest();
                                    }
                                });

Instead of holder you need object of parent view(LinearLayout /RelativeLayout or whatever you have given)inside xml connected with this adapter class您需要在与此适配器类连接的 xml 中的父视图对象(LinearLayout /RelativeLayout 或您提供的任何内容)而不是持有人

Finally i was able to solve it, The issue was with getting the parent view i did this to make it work view.getRootView()最后我能够解决它,问题是获取父视图我这样做是为了让它工作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