首页 > 解决方案 > 在 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.

标签: javaandroidfirebasefirebase-realtime-databaseinterface

解决方案


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


推荐阅读