无法通过 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);
我要做什么?
我有一个 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);