2016-08-31 79 views
0

RecyclerView onClickのメソッドを使用して、recyclerviewのアイテムクリックメソッドを実行しています。しかし、問題はです。recyclerviewの子ボタンを処理する方法は?私はアダプタでonclickメソッドを実行していますが、それでも動作しません。常に、まず、recyclerview onitemclicklistenerを実行してから、アダプタからonclickメソッドを実行してください。正しく処理するには?RecyclerView行onClickと子ボタンonClick

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){} 
} 
+0

の以下のコードを参照してください...アダプタ部でのOnClickを実装していますアダプターのビューで、メイン・ビューとボタンにlisternerを設定します。 –

+0

item_row xmlのメイン・レイアウトでonClickListenerを使用します。 – Nidhi

答えて

1

私はあなたのクリックのリスナーに設定しようとするかもしれない代わりに、子クリックリスナーに使用しての私のアダプタクラス

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { 
    private Context context; 
    List<Video_Details> video; 

    public DataAdapter(List<Video_Details> video, Context context) { 
     super(); 
     this.context = context; 
     this.video = video; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.card_row, parent, false); 
     ViewHolder viewHolder = new ViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 
     final Video_Details videoDetails = video.get(position); 
     String url; 
     final String VideoID; 

     holder.title.setText(video.get(position).getTitle()); 

     VideoID= video.get(position).getV_id(); 
     url = video.get(position).getThumb(); 

     Glide.with(context) 
       .load(url) 
       .override(150,70) 
       .into(holder.thumb); 
     //viewHolder.thumb.setText(android.get(i).getVer()); 
     // viewHolder.tv_api_level.setText(android.get(i).getApi()); 

     holder.vm.setOnClickListener(new View.OnClickListener() { 
             @Override 
             public void onClick(View v) { 
              Toast.makeText(v.getContext(), "You Clicked"+video.get(position).getV_id(), Toast.LENGTH_SHORT).show(); 
              Intent intent = new Intent(v.getContext(),Play_Video.class); 
              intent.putExtra("VideoId",(video.get(position).getV_id())); 
              intent.putExtra("Title",(video.get(position).getTitle())); 
              v.getContext().startActivity(intent); 


             } 
            } 

     ); 
    } 

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




    public class ViewHolder extends RecyclerView.ViewHolder{ 
     public TextView title; 
     public ImageView thumb; 
     public String videoid; 
     public View vm; 
     public ViewHolder(View view) { 
      super(view); 
      vm = view; 
      title = (TextView)view.findViewById(R.id.title); 
      thumb = (ImageView) view.findViewById(R.id.thumb); 



      //tv_version = (TextView)view.findViewById(R.id.tv_version); 
      //tv_api_level = (TextView)view.findViewById(R.id.tv_api_level); 

     } 
    } 


}