我想做什么?
我有一个RecyclerView
,它会保留行,看起来像ListView
。这些列表的行在feed_listview_row.xml
定义。我对此RecyclerAdapter
有一个RecyclerView
,它名为Feed_Recycler_Adapter.java
,您可以在下面看到它。
当用户长按其中一行时,我想显示AlertDialog
。有一个问题是用户是否要删除此行或保留它。用户接受删除行后。将SnackBar
通知用户并给予她/他最后一次机会将其取回。
问题
我无法查看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
。
答案 0 :(得分:0)
我阅读了你的一些大问题,发现你需要rootView(coordinatorLayout)
这可能对你有帮助:
使用YourAdapter
param:
Context
public yourAdapter(Context activity){
context = activity // context is local object
}
现在在您创建YourAdapter实例的活动中执行以下操作:
adapter = new YourAdapter(YourActivity.this);
当你想要展示snakBar时:
Snackbar.make(((YourActivity) context).coordinatorLayout, "Post deleted.", Snackbar.LENGTH_LONG).show()
确保在YourActivity类中定义coordinatorLayout。
答案 1 :(得分:0)
我从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方法已经在我的Adapter类中,我可以使用我的构造函数设置的cl变量创建一个快餐栏。
Push_Options.ownerOrfollower(v.getContext(), selectedListId, selectedPostId, cl);