2015-09-21 19 views
0

我想补充onclicklistener这个RecyclerView但我tryied一切,它不工作!:如何添加回收站项目SetOnClickListener在javatechig例如

FeedItem:

public class FeedItem { 
    private String title; 
    private String thumbnail; 
    private String date; 
    private String tags; 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getThumbnail() { 
     return thumbnail; 
    } 

    public void setThumbnail(String thumbnail) { 
     this.thumbnail = thumbnail; 
    } 

    public String getDate() { 
     return date; 
    } 

    public void getDate(String date) { 
     this.date = date; 
    } 

    public String getTags() { 
     return tags; 
    } 

    public void setTags(String tags) { 
     this.tags = tags; 
    } 

} 

FeedListRowHolder:

public class FeedListRowHolder extends RecyclerView.ViewHolder { 
    protected ImageView thumbnail; 
    protected TextView title; 
    protected TextView date; 
    protected TextView tags; 

    public FeedListRowHolder(View view) { 
     super(view); 
     this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
     this.title = (TextView) view.findViewById(R.id.title); 
     this.date = (TextView) view.findViewById(R.id.date); 
     this.tags = (TextView) view.findViewById(R.id.tagsItems); 
    } 

} 

适配器:

public class MyRecyclerAdapter extends RecyclerView.Adapter<FeedListRowHolder> { 

    private List<FeedItem> feedItemList; 
    private Context mContext; 

    public MyRecyclerAdapter(Context context, List<FeedItem> feedItemList) { 
     this.feedItemList = feedItemList; 
     this.mContext = context; 
    } 

    @Override 
    public FeedListRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, null); 
     return new FeedListRowHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) { 
     FeedItem feedItem = feedItemList.get(i); 
     Picasso.with(mContext).load(feedItem.getThumbnail()) 
       .error(R.drawable.placeholder) 
       .placeholder(R.drawable.placeholder) 
       .into(feedListRowHolder.thumbnail); 

     feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle())); 
     feedListRowHolder.date.setText(Html.fromHtml(feedItem.getDate())); 
     feedListRowHolder.tags.setText(Html.fromHtml(feedItem.getTags())); 
    } 

    @Override 
    public int getItemCount() { 
     return (null != feedItemList ? feedItemList.size() : 0); 
    } 
} 

如何我们可以添加OnClickListener这个RecyclerView

感谢

+0

你想点击整个列表项?或列表中的任何特定项目? –

+0

只是为了展示他们的细节... – mandev

回答

1

写在onCreate方法

recyclerview.addOnItemTouchListener(
        new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() { 
         @Override 
         public void onItemClick(View view, int position) { 
          FeedItem bookScreenDateEntity = (FeedItem)yourList.get(position); 

          bookScreenDateEntity.getServiceid(); 

         } 
        }) 
      ); 

RecyclerItemClickListener类:

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 
     private OnItemClickListener mListener; 

     public interface OnItemClickListener { 
      public void onItemClick(View view, int position); 
     } 

     GestureDetector mGestureDetector; 

     public RecyclerItemClickListener(Context context, OnItemClickListener listener) { 
      mListener = listener; 
      mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
       @Override 
       public boolean onSingleTapUp(MotionEvent e) { 
        return true; 
       } 
      }); 
     } 

     @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) { 
     } 
    } 
1

您可以点击RecyclerItem这样

public class FeedListRowHolder extends RecyclerView.ViewHolder { 
    protected ImageView thumbnail; 
    protected TextView title; 
    protected TextView date; 
    protected TextView tags; 

    public FeedListRowHolder(View view) { 
     super(view); 
     this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
     this.title = (TextView) view.findViewById(R.id.title); 
     this.date = (TextView) view.findViewById(R.id.date); 
     this.tags = (TextView) view.findViewById(R.id.tagsItems); 
     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // do you stuff here 
      } 
     }); 
    } 

} 
1

你应该实现在RecyclerView.ViewHolder的View.OnClickListener。如果你想听整个项目点击。请参阅下面的修改视图类

public class FeedListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

    protected ImageView thumbnail; 
    protected TextView title; 
    protected TextView date; 
    protected TextView tags; 

    public FeedListRowHolder(View view) { 
     super(view); 
     this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
     this.title = (TextView) view.findViewById(R.id.title); 
     this.date = (TextView) view.findViewById(R.id.date); 
     this.tags = (TextView) view.findViewById(R.id.tagsItems); 
    } 


    @Override 
    public void onClick(View v) { 

    } 
} 

让我们来做这个。如果你想要单独的视图点击,然后注册每个按钮或查看点击这个视图持有人。例如缩略图点击可以注册如下。

public class FeedListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

    protected ImageView thumbnail; 
    protected TextView title; 
    protected TextView date; 
    protected TextView tags; 

    public FeedListRowHolder(View view) { 
     super(view); 
     this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
     this.thumbnail.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      } 
     }); 
     this.title = (TextView) view.findViewById(R.id.title); 
     this.date = (TextView) view.findViewById(R.id.date); 
     this.tags = (TextView) view.findViewById(R.id.tagsItems); 
    } 


    @Override 
    public void onClick(View v) { 

    } 
} 
1

有许多方法来处理这个问题,但是他们中的一个在下面

RecyclerView recyclerView = findViewById(R.id.recycler); 
recyclerView.addOnItemTouchListener(
    new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() { 
     @Override public void onItemClick(View view, int position) { 
     // do whatever 
     } 
    }) 
); 

RecyclerItemClickListener实现给定:

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

    GestureDetector mGestureDetector; 

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) { 
    mListener = listener; 
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
     @Override public boolean onSingleTapUp(MotionEvent e) { 
     return true; 
     } 
    }); 
    } 

    @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.getChildPosition(childView)); 
     return true; 
    } 
    return false; 
    } 

    @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } 
}