java - 在 Java android 的上下文菜单中实现类似的功能
问题描述
我创建了一个具有点击、点赞和删除三个功能的界面。我试图找出处理类似方法的最佳方法以及如何实现它。有什么建议么?我是否必须在 Firebase 中进行数据库引用来存储喜欢等,或者我可以在设备的本地内存中进行吗?任何帮助都会很棒。下面是我的适配器和我的 MainActivity 的片段,我试图在其中放置所有类似的代码。
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder>{
private Context context;
private List<Upload> uploads;// a list containing content from Uploads class to do this we need constructor
private OnItemClickListener Listener;
public ImageAdapter(Context context, List<Upload> uploads) {
this.context = context;
this.uploads = uploads;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//pass in layout of cards to populate uploads
View v = LayoutInflater.from(context).inflate(R.layout.image_item, parent, false);
return new ImageViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {//get data out of our uploads
Upload upload = uploads.get(position);
}
@Override
public int getItemCount() {
return uploads.size();
}
public class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener {
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
//ImageViewHolder will now handle click events within its constructor
itemView.setOnClickListener(this);
itemView.setOnCreateContextMenuListener(this);
}
@Override
public void onClick(View v) {//we can now handle click events on our itemView using this constructor and we want to pass
//these clicks back over its interface with position.
if (Listener != null){
int position = getAdapterPosition();//grabs position of the clicked item
if (position != RecyclerView.NO_POSITION);{//this makes sure the click position is still valid
Listener.onItemClick(position);
}
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Select Action");
MenuItem like = menu.add(Menu.NONE, 1, 1, "Like");
MenuItem delete = menu.add(Menu.NONE, 2, 2, "Delete");
like.setOnMenuItemClickListener(this);
delete.setOnMenuItemClickListener(this);
}
@Override
public boolean onMenuItemClick(MenuItem item) {
if (Listener != null){
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION);{
switch (item.getItemId()){
case 1:
Listener.onLikeClick(position);
return true;
case 2:
Listener.onDeleteClick(position);
return true;
}
}
}
return false;
}
}
//implement LikeClick in mainactivity page
public interface OnItemClickListener{
void onItemClick(int position);//handles general clicks
void onLikeClick(int position);//handles like clicks
void onDeleteClick(int position);//handles delete clicks
}
public void setOnItemClickListener(OnItemClickListener listener){//we have set the activity as a listener for our interface
Listener = listener;
}
}
//this method is used to set activity for our interface
//Listener = listener sets activity as the Listener for interface
@Override
public void onLikeClick(int position) {
Toast.makeText(this,"Like" + position, Toast.LENGTH_SHORT).show();
}
//within this function edit it to start generating likes.
解决方案
您可以在您的主要活动中实现接口,然后单击以调用其他方法来更新喜欢等。关于保存,您可以根据您正在构建的应用程序采取两种方式。
推荐阅读
- google-sheets - Google表格中带有“标签”的下拉菜单
- string - 错误太多参数试图匹配字符串bash中的子字符串
- loops - 遍历 git DIFF 并使用唯一的 Commit 消息一一提交每个文件
- c# - 列表数组中的线性搜索
- r - 在 blogdown 中使用 hugo-academic 激活/停用小部件
- web - 网页中的隐藏事件
- pandas - Keras model.fit 只接受没有索引的数据。为什么?
- pandas - 需要将以下内容转换为数据框
- javascript - Metamask BSC bep20 令牌的 web3 JS 支付按钮
- aws-lambda - 如何使用 Middy 与招摇