Android RecyclerView 에 FootView 와 HeadView 추가

전제 개요:
이 글 은 RecyclerView 의 기본 적 인 사용 방법 을 소개 했다.원문 은 다음 과 같다.
FootView 와 HeadView 는 ListView 자체 에 해당 하 는 함수 가 있 지만 새로운 유행 하 는 RecyclerView 에 서 는 없어 졌 습 니 다.FootView 는 페이지 별로 불 러 오기(더 많이 끌 어 올 리 기)에서 중요 한 역할 을 하기 때문에 배 워 야 합 니 다.(HeadView 의 추 가 는 FootView 의 추가 와 대체적으로 같 습 니 다.FootView 의 추가 만 말 합 니 다)
효과:(원본 코드 는 문장 끝 에 있 음)

관건 을 실현 하 다
int getItemView Type(int position):이 함 수 는 RecyclerView 에서 자체 적 으로 가지 고 있 는 함수 입 니 다.매개 변 수 는 item 의 position 이 고 int 형식 으로 형식 을 표시 합 니 다.
이 함수 의 역할 은 일반적인 아 이 템 과 FootView 의 아 이 템 을 구분 하여 FootView 라 는 아 이 템 이 adapter 의 맨 아래 에 있 도록 하 는 것 입 니 다.
예 에서 두 가지 유형 을 다음 과 같이 정의 했다.

 //  final int    ViewType     
 private final int NORMAL_TYPE = 0;
 private final int FOOT_TYPE = 1111;


이 함 수 는 다음 과 같다.

 @Override
 public int getItemViewType(int position) {
 if (position == max_count - 1) {
 return FOOT_TYPE;
 }
 return NORMAL_TYPE;
 }
실현 절차
1.getItemViewType(int position)을 정의 하고 자신 이 필요 로 하 는 ViewType 의 유형 을 정의 합 니 다.
2.ViewHolder(),onCreate ViewHolder()와 onBindViewHolder()를 정의 할 때 두 가지 상황 을 고려 합 니 다.하 나 는 일반적인 item 이 고 다른 하 나 는 FootView 입 니 다.
또한 기본 ViewHolder()함수 에는 View itemView 매개 변수 만 있 습 니 다.필요 하기 때문에 int view Type 의 인 자 를 추가 해 야 합 니 다.코드 에는 다음 과 같 습 니 다.

//   viewHolder,      onBindViewHolder       
 public ViewHolder(View itemView, int viewType) {
 super(itemView);
 if (viewType == NORMAL_TYPE) {
 tvViewHolder = (TextView) itemView.findViewById(R.id.tv_view_holder);
 llViewHolder = (LinearLayout) itemView;
 } else if (viewType == FOOT_TYPE) {
 tvFootView = (TextView) itemView;
 }
 }
여기에 세 함수 의 대체적인 작용 을 다시 한 번 말씀 드 리 겠 습 니 다.
ViewHolder(View itemView, int viewType):
item 레이아웃 에 있 는 컨트롤 을 ViewHolder 에서 정의 하 는 속성 과 연결 하여 onBindViewHolder()에서 사용 하기 편리 합 니 다.
onCreateViewHolder(ViewGroup parent, int viewType):
이 함 수 는 모든 아 이 템 을 만 드 는 데 사 용 됩 니 다.마지막 으로 view 가 아니 라 돌아 오 는 ViewHolder 입 니 다.
onBindViewHolder(ViewHolder holder, int position):
이 함수 에 서 는 아 이 템 의 컨트롤 에 데 이 터 를 연결 하 는 데 사 용 됩 니 다.
코드:
상기 분석 을 통 해 코드 를 보면 독자 들 이 쉽게 이해 할 수 있 을 것 이다.아래 에 관건 적 인 adapter 코드 와 소스 주 소 를 첨부 한다.

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
 private List<String> mData;//  
 private int max_count = 10;//     
 private Boolean isFootView = false;//     FootView
 private String footViewText = "";//FootView   

 //  final int    ViewType     
 private final int NORMAL_TYPE = 0;
 private final int FOOT_TYPE = 1111;


 public RecyclerAdapter(List<String> data) {
 mData = data;
 }

 public class ViewHolder extends RecyclerView.ViewHolder {
 public TextView tvViewHolder;
 public LinearLayout llViewHolder;

 public TextView tvFootView;//footView TextView       layout

 //   viewHolder,      onBindViewHolder       
 public ViewHolder(View itemView, int viewType) {
 super(itemView);
 if (viewType == NORMAL_TYPE) {
 tvViewHolder = (TextView) itemView.findViewById(R.id.tv_view_holder);
 llViewHolder = (LinearLayout) itemView;
 } else if (viewType == FOOT_TYPE) {
 tvFootView = (TextView) itemView;
 }
 }
 }

 @Override
 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
 View normal_views = LayoutInflater.from(parent.getContext()).inflate(
 R.layout.rc_item, parent, false);
 View foot_view = LayoutInflater.from(parent.getContext()).inflate(
 R.layout.foot_view, parent, false);

 if (viewType == FOOT_TYPE)
 return new ViewHolder(foot_view, FOOT_TYPE);
 return new ViewHolder(normal_views, NORMAL_TYPE);
 }

 @Override
 public int getItemViewType(int position) {
 if (position == max_count - 1) {
 return FOOT_TYPE;
 }
 return NORMAL_TYPE;
 }

 @Override
 public void onBindViewHolder(ViewHolder holder, int position) {
 //   ViewHolder         
 Log.d("xjj", getItemViewType(position) + "");
 //  footview  ,      ViewType FOOT_TYPE
 if (isFootView && (getItemViewType(position) == FOOT_TYPE)) {
 holder.tvFootView.setText(footViewText);
 } else {
 holder.tvViewHolder.setText(mData.get(position) + position);
 }
 }

 @Override
 public int getItemCount() {
 if (mData.size() < max_count) {
 return mData.size();
 }
 return max_count;
 }

 //         footView    
 public void setFootViewText(String footViewText) {
 isFootView = true;
 this.footViewText = footViewText;
 }
}

넓히다
다음 글 에서 필 자 는 이 를 바탕 으로 약간의 변경 을 했 고 페이지 별로 불 러 오 는 기능 을 쉽게 실현 했다.글 의 주 소 는 다음 과 같다.
http://blog.csdn.net/double2hao/article/details/52788708
원본 주소:안 드 로 이 드 RecyclerView 레이아웃 은 정말 그렇게 간단 합 니 다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기