【问题标题】:Android | AlertDialog on RecyclerView Item Click安卓 | RecyclerView 项目单击上的 AlertDialog
【发布时间】:2017-08-01 12:45:10
【问题描述】:

我已经实现了一个 RecyclerView。现在我想在单击 RecyclerView 的项目时显示一个 AlertDialog 。我尝试了很多方法,但都没有奏效。 这是我的适配器类,

public class SearchResultAdapter extends RecyclerView.Adapter<SearchResultAdapter.MyViewHolder> {
private List<Searchresult> resultList;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView item1, item2, item3;

    public MyViewHolder(View view) {
        super(view);
        item1 = (TextView) view.findViewById(R.id.item1);
        item2 = (TextView) view.findViewById(R.id.item2);
        item3 = (TextView) view.findViewById(R.id.item3);
    }
}

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

@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
    final View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.search_result_row, parent, false);
    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    Searchresult result = resultList.get(position);
    holder.item1.setText(result.getItem1());
    holder.item2.setText(result.getItem2());
    holder.item3.setText(result.getItem3());
}

@Override
public int getItemCount() {
    return resultList.size();
}
}

AlertDialog 应该显示 item1、item2 和 item3。请帮我在 RecyclerView 上实现一个 onClickListener。

【问题讨论】:

    标签: android android-recyclerview onclicklistener android-alertdialog onitemclicklistener


    【解决方案1】:

    问题就在这里,您还必须将context 传递给适配器构造函数,如下所示

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

    在您启动适配器的活动中,如下所示

    SearchResultAdapter madapter = new SearchResultAdapter (List, this);
    

    然后在你的 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();
            }
        });
    }
    

    【讨论】:

      【解决方案2】:

      使用以下代码打开警报对话框;

        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();
                  }
              });
      

      【讨论】:

        【解决方案3】:

        试试这个 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) {
            }
        }
        

        像这样将点击列表附加到回收站视图

                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) {
        
                        }
                    })
            );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-16
          • 2020-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多