Android XRecyclerView 가장 간단 한 아 이 템 클릭 이벤트 처리

예전 에는 PullToRefresh 를 썼 는데 너무 아웃 이 라 고 생각 했 어 요.현재 많은 사람들 이 RecyclerView 를 사용 하 는데 간단 한 용법 으로 구조 가 다양 하고 주로 폭포 류 가 있다.이제 야 RecyclerView.Layout Manager 가 정말 강하 다 는 것 을 알 게 되 었 다.
하지만 addHeaderView 라 는 말 은 RecyclerView 가 실현 되 지 않 았 기 때문에 저 는 XRecyclerView 를 사 용 했 습 니 다.사실은 RecyclerView 를 바탕 으로 다시 봉 인 했 기 때문에 사용 하기에 좋 습 니 다.
XRecyclerView 를 정확하게 사용 하여 아 이 템 을 클릭 하여 이벤트 처 리 를 하 는 문 제 를 말씀 드 리 겠 습 니 다.사실은 RecyclerView.View Holder 에 있 는 아 이 템 을 클릭 하 는 것 입 니 다.그러면 문 제 는 어떻게 간단하게 사용 하 느 냐 하 는 것 입 니 다.
일반적으로 우 리 는 아 이 템 레이아웃 의 맨 바깥쪽 에 id="@+id/..."를 직접 설정 하고 onBindView Holder 에서 holder.**.setOnClickListener()로 사건 처 리 를 합 니 다.이렇게 하 는 지 아 닌 지 보 세 요.이렇게 하면 계속 내 려 다 보고 간단 한 것 을 가르쳐 드 립 니 다.
아 이 템 클릭 이벤트 간단하게 사용 하기
1.먼저 RecyclerView.View Holder 소스 코드 가 어떻게 쓰 여 있 는 지 살 펴 봅 니 다.

/**
 * A ViewHolder describes an item view and metadata about its place within the RecyclerView.
 *
 * <p>{@link Adapter} implementations should subclass ViewHolder and add fields for caching
 * potentially expensive {@link View#findViewById(int)} results.</p>
 *
 * <p>While {@link LayoutParams} belong to the {@link LayoutManager},
 * {@link ViewHolder ViewHolders} belong to the adapter. Adapters should feel free to use
 * their own custom ViewHolder implementations to store data that makes binding view contents
 * easier. Implementations should assume that individual item views will hold strong references
 * to <code>ViewHolder</code> objects and that <code>RecyclerView</code> instances may hold
 * strong references to extra off-screen item views for caching purposes</p>
 */
public static abstract class ViewHolder {
 public final View itemView;

 .......

 public ViewHolder(View itemView) {
  if (itemView == null) {
   throw new IllegalArgumentException("itemView may not be null");
  }
  this.itemView = itemView;
 }

 .......
}
2.우리 가 그것 을 계승 하여 무슨 일 을 했 는 지 다시 보 자.

public class XRViewHolder extends RecyclerView.ViewHolder {
 public XRViewHolder(View view) {
  super(view);
  ButterKnife.bind(this, view);
 }
 .......
 public void onBindViewHolder(VH holder, final int position) {
  if (position >= 0) {
   holder.itemView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
     itemClick(getItem(position), position);
    }
   });
  }
 }
}
사용자 정의 XRViewHolder 를 보 는 구조 방법 에 도 슈퍼(view)가 사용 되 었 습 니 다.
사실 여기 view 는 item 의 레이아웃 입 니 다.그러면 클릭 이 벤트 를 실현 하 는 것 이 쉬 워 집 니 다.holder.itemview.setOnClickListener 를 직접 사용 할 수 있 습 니 다.
질문
XRecyclerView.getChildAt(position).setOnClickListener()로 잘못된 문제 가 발생 했 습 니 다.addHeaderView 에 있 으 면 이러한 잘못된 문제 가 더욱 뚜렷 해 집 니 다.먼저 XRecyclerView 의 일부 소스 코드 를 살 펴 보 세 요.

public class XRecyclerView extends RecyclerView {

 private WrapAdapter mWrapAdapter;
 ......

 public void addHeaderView(View view) {
 sHeaderTypes.add(HEADER_INIT_INDEX + mHeaderViews.size());
 mHeaderViews.add(view);
 if (mWrapAdapter != null) {
  mWrapAdapter.notifyDataSetChanged();
 }
 }

 ......
 private class WrapAdapter extends RecyclerView.Adapter<ViewHolder> {

 @Override
 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  if (viewType == TYPE_REFRESH_HEADER) {
   return new SimpleViewHolder(mRefreshHeader);
  } else if (isHeaderType(viewType)) {
   return new SimpleViewHolder(getHeaderViewByType(viewType));
  } else if (viewType == TYPE_FOOTER) {
   return new SimpleViewHolder(mFootView);
  }
  return adapter.onCreateViewHolder(parent, viewType);
 }
}
우리 가 addHeaderView 를 할 때마다 그 는 notifyDataSetChanged 를 진행 하고 onCreate View Holder 에 도 대응 하 는 isHeaderType 판단 이 있 기 때문에 첫 번 째 item 을 선택 하여 이벤트 처 리 를 하려 고 할 때 pos=0 은 headerview 에 속 할 수 있 습 니 다.
총결산
item 클릭 이벤트 간단 하고 편리 하 며 빠 른 방법:holder.itemView.setOnClickListener()
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기