无法通过 findViewById 在 RecylerAdapter 中获取 CoordinatorLayout

Can't get CoordinatorLayout inside RecylerAdapter via findViewById

我要做什么?

我有一个 RecyclerView,它保留行并且看起来像 ListView。这些列表的行在 feed_listview_row.xml 处定义。我有一个 RecyclerAdapter 这个 RecyclerView,它叫做 Feed_Recycler_Adapter.java,你可以在下面看到。

我想在用户 Long 单击这些行之一时显示 AlertDialog。有一个关于用户是要删除还是保留该行的问题。用户接受后删除该行。将有 SnackBar 通知用户并给 her/him 最后一次收回的机会。

问题

我无法查看 SnackBar,因为我无法显示 CoordinatorLayout

代码

Feed_Recycler_Adapter.java

holder.layout.setOnLongClickListener(new View.OnLongClickListener() {
  @Override
 public boolean onLongClick(View v) {

  cl = (CoordinatorLayout) v.findViewById(R.id.FeedCoordinatorLayout); 
   /*this row above is failing to fill the cl variable. 
    This cl variable returns null! I need to get the coordinatorlayout for snackbar*/
    String selectedListId = mDataset.get(position).getListId();
    String selectedPostId = mDataset.get(position).getPostId();
    Push_Options.ownerOrfollower(v.getContext(), selectedListId, selectedPostId, cl);
              return true;
                    }
                });

我试过了

我试图在 Feed_Recycler_Adapter.ViewHolder onCreateViewHolder 中膨胀 content_feed 并将其用作获取 FeedCoordinatorLayout 的视图,但没有解决问题,但我没有收到任何错误,仅仅是因为 cl不为空。但也没有显示 SnackBar

我读了你的大问题的一部分,发现你需要 rootView (coordinatorLayout)
这可能对你有帮助:
使用 Context 参数将构造函数添加到 YourAdapter

public yourAdapter(Context activity){
    context = activity // context is local object
}

现在在您创建 YourAdapter 实例的 activity 中执行此操作:

adapter = new YourAdapter(YourActivity.this); 

当您想显示 snakBar 时:

Snackbar.make(((YourActivity) context).coordinatorLayout, "Post deleted.", Snackbar.LENGTH_LONG).show()

一定要在 YourActivity 中定义 coordinatorLayout class .

我在 dariush f 的回答的帮助下找到了解决方案。

我修改了我现有的构造函数以具有 CoordinatorLayout 字段。

class Feed_Recycler_Adapter extends RecyclerView.Adapter<Feed_Recycler_Adapter.ViewHolder> {

public static String TAG = "Feed Recycler Adapter";
private CoordinatorLayout cl;
private ArrayList<Feed_List_Class> mDataset;
//CoordinatorLayout cl;
// Provide a suitable constructor (depends on the kind of dataset)
Feed_Recycler_Adapter(ArrayList<Feed_List_Class> myDataset,CoordinatorLayout coordinatorLayout) {
    cl=coordinatorLayout;
    mDataset = myDataset;
}

我在实例化此适配器时发送协调器布局。像这样:

CoordinatorLayout cl = (CoordinatorLayout) findViewById(R.id.FeedCoordinatorLayout) ;
mAdapter = new Feed_Recycler_Adapter(posts,cl);

因为我的 onLongClick 方法已经在我的适配器中 class 我可以用我的构造函数设置的 cl 变量创建一个小吃店。

Push_Options.ownerOrfollower(v.getContext(), selectedListId, selectedPostId, cl);