【问题标题】:Implement a like function within a context menu in Java android在 Java android 的上下文菜单中实现类似的功能
【发布时间】:2021-05-14 06:09:13
【问题描述】:

我已经创建了一个具有点击、点赞和删除三个功能的界面。我试图找出处理类似方法的最佳方法以及如何实现它。有什么建议?我是否必须在 Firebase 中进行数据库引用来存储喜欢等,或者我可以在设备的本地内存中进行吗?任何帮助都会很棒。下面是我的 MainActivity 的适配器和 sn-p,我试图在其中放置所有类似的代码。

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.

【问题讨论】:

  • 这段代码中到底有什么不符合您的预期?
  • 一切正常我不知道如何在上下文菜单中实现收藏按钮背后的逻辑

标签: java android firebase firebase-realtime-database interface


【解决方案1】:

您可以在您的主要活动中实现该接口,然后单击以调用其他方法来更新喜欢等。关于保存,您可以根据您正在构建的应用程序采取两种方式。

【讨论】:

  • 就我的 onLikeClick 方法背后的逻辑而言,我是否会在其中创建一个新的 firebase 引用来存储所有收藏夹,然后将其链接到一个新适配器以供另一个回收器视图显示喜欢等。跨度>
  • 你可以随心所欲地做火力基地,但我建议你组织你可以访问更多东西而不会受苦的方式:)。如果您觉得我的回答有用,请点赞我的回答。
猜你喜欢
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多