Android | AlertDialog on RecyclerView Item Click

后端 未结 3 1136
萌比男神i
萌比男神i 2020-12-19 09:02

I have implemented a RecyclerView. Now I want to display an AlertDialog when an item of RecyclerView is clicked. I tried many ways and none of them worked. Here is my adapt

相关标签:
3条回答
  • 2020-12-19 09:18

    Use below code for open alert dialog;

      holder.item1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    AlertDialog.Builder builder1 = new AlertDialog.Builder(getActivity());
                    builder1.setMessage("Do you want to remove ?");
                    builder1.setCancelable(true);
    
                    builder1.setPositiveButton(
                            "Yes",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) 
                                 {                        
                             //Do your code...
                                   }
                            });
    
                    builder1.setNegativeButton(
                            "No",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    dialog.cancel();
                                }
                            });
    
                    AlertDialog alert11 = builder1.create();
                    alert11.show();
                }
            });
    
    0 讨论(0)
  • 2020-12-19 09:19

    try this creat one class RecyclerItemClickListener like this

      package com.ncrypted.recyclerviewwithindex;
    
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.GestureDetector;
    import android.view.MotionEvent;
    import android.view.View;
    
    
    public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
        private OnItemClickListener mListener;
    
        public interface OnItemClickListener {
            public void onItemClick(View view, int position);
    
            public void onLongItemClick(View view, int position);
        }
    
        GestureDetector mGestureDetector;
    
        public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
            mListener = listener;
            mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    return true;
                }
    
                @Override
                public void onLongPress(MotionEvent e) {
                    View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                    if (child != null && mListener != null) {
                        mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
                    }
                }
            });
        }
    
        @Override
        public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
            View childView = view.findChildViewUnder(e.getX(), e.getY());
            if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
                mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
                return true;
            }
            return false;
        }
    
        @Override
        public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
        }
    
    
        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
        }
    }
    

    attach click lister to recyclerview like this

            indexRecyclerView.addOnItemTouchListener(
                new RecyclerItemClickListener(MainActivity.this, indexRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
    
                    @Override
                    public void onItemClick(View view, int position) {
                        // show your alert Dailog here
                       }
    
                    @Override
                    public void onLongItemClick(View view, int position) {
    
                    }
                })
        );
    
    0 讨论(0)
  • 2020-12-19 09:25

    problem is here , you have to also pass context to the adapter constructor like given below

     public SearchResultAdapter(List<Searchresult> resultList , Context context) {
        this.resultList = resultList;
        this.context = context
        }
    

    in your Activity where you initiate adapter use like below

    SearchResultAdapter madapter = new SearchResultAdapter (List, this);
    

    then in your onBindViewHolder

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        Searchresult result = resultList.get(position);
         holder.item1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //pass the 'context' here
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
                alertDialog.setTitle("Your title");
                alertDialog.setMessage("your message ");
                alertDialog.setPositiveButton("CANCEL", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
                alertDialog.setNegativeButton("YES", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
                        // DO SOMETHING HERE
    
                    }
                });
    
                AlertDialog dialog = alertDialog.create();
                dialog.show();
            }
        });
    }
    
    0 讨论(0)
提交回复
热议问题