为 RecyclerView 项目添加底部菜单
Add a bottom menu for RecyclerView item
我有一个 recyclerview,右边有一个选项按钮,我想实现如下动画所示的效果:
我正在使用 this 作为我的参考,但我有一些断开连接。
首先我想知道我是否能做到这一点,因为我在将菜单添加到 recyclerview 时发现的每件事都在添加一个基本菜单弹出窗口,这不是我想要的。
我在从 viewholder 访问菜单时也有一些断开连接,我可以从我的 fragment 访问它,但我认为我需要从 viewholder 调用它所以我点击了哪一行来启动菜单。
如果我对实施考虑过多并且有更简单的方法,我愿意听取它。
我不确定我是否理解你想要什么,但是如果要在 recyclerview 的行项目中有一个按钮,以便在单击该按钮时从屏幕底部弹出一个抽屉,那么你应该只为 activity 使用普通的抽屉设置 (Navigation Drawer, Create a navigation drawer) 并将 OnClickListener
添加到行按钮(这可以在 onCreateViewHolder()
或持有人的构造函数)通过调用 openDrawer()
触发抽屉打开。注意做后者,你必须通过适配器构造函数将导航抽屉(DrawerLayout
)传递到适配器(这意味着你的适配器需要一些东西来存储 DrawerLayout
)。
所以
public class CustomAdaptor extends RecyclerView.Adapter<CustomViewHolder>{
private Context mContext;
private int mLayoutResourceId;
private ArrayList<Item> items;
private DrawerLayout drawer;
public CustomAdaptor (Context context, int resource, ArrayList<Item> itemArray, DrawerLayout drawer) {
this.mContext = context;
this.mLayoutResourceId = resource;
this.items = itemArray;
this.drawer = drawer;
}
public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(mLayoutResourceId, parent, false);
final CustomViewHolder holder = new CustomViewHolder(view);
holder.mbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//Check if drawer is null and if not then call
drawer.drawerOpen();
}
});
return holder;
}
}
其中 mButton
是 holder/row 中的按钮。请注意,我还没有对此进行测试,所以我可能会忘记一些事情。
我有一个 recyclerview,右边有一个选项按钮,我想实现如下动画所示的效果:
我正在使用 this 作为我的参考,但我有一些断开连接。
首先我想知道我是否能做到这一点,因为我在将菜单添加到 recyclerview 时发现的每件事都在添加一个基本菜单弹出窗口,这不是我想要的。
我在从 viewholder 访问菜单时也有一些断开连接,我可以从我的 fragment 访问它,但我认为我需要从 viewholder 调用它所以我点击了哪一行来启动菜单。
如果我对实施考虑过多并且有更简单的方法,我愿意听取它。
我不确定我是否理解你想要什么,但是如果要在 recyclerview 的行项目中有一个按钮,以便在单击该按钮时从屏幕底部弹出一个抽屉,那么你应该只为 activity 使用普通的抽屉设置 (Navigation Drawer, Create a navigation drawer) 并将 OnClickListener
添加到行按钮(这可以在 onCreateViewHolder()
或持有人的构造函数)通过调用 openDrawer()
触发抽屉打开。注意做后者,你必须通过适配器构造函数将导航抽屉(DrawerLayout
)传递到适配器(这意味着你的适配器需要一些东西来存储 DrawerLayout
)。
所以
public class CustomAdaptor extends RecyclerView.Adapter<CustomViewHolder>{
private Context mContext;
private int mLayoutResourceId;
private ArrayList<Item> items;
private DrawerLayout drawer;
public CustomAdaptor (Context context, int resource, ArrayList<Item> itemArray, DrawerLayout drawer) {
this.mContext = context;
this.mLayoutResourceId = resource;
this.items = itemArray;
this.drawer = drawer;
}
public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(mLayoutResourceId, parent, false);
final CustomViewHolder holder = new CustomViewHolder(view);
holder.mbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//Check if drawer is null and if not then call
drawer.drawerOpen();
}
});
return holder;
}
}
其中 mButton
是 holder/row 中的按钮。请注意,我还没有对此进行测试,所以我可能会忘记一些事情。