Android 는 RecyclerView 를 사용 하여 사용자 정의 목록,클릭 이벤트 및 드 롭 다운 리 셋 을 실현 합 니 다.

Android 는 RecyclerView 를 사용 합 니 다.

1.리 시 클 러 뷰 란 무엇 인가
RecyclerView 는 Android-support-v7-21 버 전에 새로 추 가 된 Widgets 로 공식 적 으로 는 RecyclerView 는 ListView 의 업그레이드 버 전 으로 더욱 선진 적 이 고 유연 하 다.
쉽게 말 하면 RecyclerView 는 새로운 보기 그룹 으로 어댑터 기반 의 모든 보기 에 비슷 한 렌 더 링 방식 을 제공 하 는 것 이 목표 입 니 다.이것 은 ListView 와 GridView 컨트롤 의 계승자 로 서 최신 슈퍼 port-V7 버 전에 서 지원 합 니 다.
2.RecyclerView 를 사용 하려 면 무엇 을 파악 해 야 합 니까?
Adapter-포장 데이터 세트 를 합 쳐 각 항목 에 보 기 를 만 듭 니 다.
LayoutManager-각 항목 의 보 기 를 적당 한 위치 에 놓 습 니 다.
OnitemClickListener-항목 마다 클릭 이 벤트 를 설정 합 니 다.
Swipe RefreshLayout--RecyclerView 에 드 롭 다운 리 셋 이벤트 추가
ItemAnimator-각 항목 의 보기 주위 나 위 에 장식 보 기 를 그립 니 다.
ItemDecoration-항목 이 추가 되 거나 제거 되 거나 정렬 되 었 을 때 애니메이션 효 과 를 추가 합 니 다.
3.RecyclerView 를 사용 하기 전에 무엇 을 준비 해 야 합 니까?
의존 패키지 추가(Android Studio 의 경우)


 
4.사용자 정의 어댑터
RecyclerView.Adapter 는 새로운 어댑터 를 포함 하고 있 습 니 다.사실은 예전 에 우리 가 사 용 했 던 어댑터 와 대체적으로 비슷 합 니 다.다만 약간 다 를 뿐 입 니 다.예 를 들 어 view holder 는 우리 에 게 봉인 을 해 주 었 습 니 다.예전 에 listview 어댑터 를 사 용 했 던 것 처럼 스스로 view holder 를 쓰 지 않 아 도 됩 니 다.
항목 보 기 는 다음 과 같 습 니 다:

인 스 턴 스 코드 는 다음 과 같 습 니 다.

public class RecyclerAdapter extends RecyclerView.Adapter {

 private List<Model> models;

 public RecyclerAdapter(List<Model> models){
  this.models = models;
 }

 class ViewHolder extends RecyclerView.ViewHolder{

  private ImageView picture;
  private TextView title,text;

  public ViewHolder(View itemView) {
   super(itemView);

   picture = (ImageView) itemView.findViewById(R.id.picture);
   title = (TextView) itemView.findViewById(R.id.title);
   text = (TextView) itemView.findViewById(R.id.text);
  }

  public ImageView getPicture(){
   return picture;
  }

  public TextView getTitle(){
   return title;
  }

  public TextView getText(){
   return text;
  }
 }

 @Override
 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view,null));
 }

 @Override
 public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

  final ViewHolder vh = (ViewHolder) holder;
  vh.getPicture().setImageResource(models.get(position).getPicture());
  vh.getTitle().setText(models.get(position).getTitle());
  vh.getText().setText(models.get(position).getText());
 }

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

5.LayoutManager 는 어떤 역할 을 합 니까?
RecyclerView 는 이전 ListView 나 GridView 처럼 ListView 와 GridView 컨트롤 의 계승자 가 되 지 않 았 기 때문에 사용 할 때 LayoutManager 를 설정 하여 어떤 유형 인지 규정 해 야 합 니 다.또한 LayoutManager 를 설정 하여 가로 또는 세로 목록 인지,반전 여 부 를 설정 할 수 있 습 니 다.
세로 목록:(세 번 째 매개 변 수 는 반전 여부,즉 미끄럼 방향 을 설정 하 는 것 입 니 다)
mLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
recyclerview.setLayoutManager(mLayoutManager);

가로 목록:
mLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
recyclerview.setLayoutManager(mLayoutManager);

수직 표 레이아웃:
mLayoutManager = new GridLayoutManager(this,2);
recyclerview.setLayoutManager(mLayoutManager);
수평 표 레이아웃:(네 번 째 매개 변 수 는 반전 여 부 를 의미 합 니 다)
mLayoutManager = new GridLayoutManager(this,2,LinearLayoutManager.HORIZONTAL,false);
recyclerview.setLayoutManager(mLayoutManager);

6.OnItemClickListener 를 왜 직접 추가 합 니까?
RecyclerView 는 RecyclerView 에 서 는 onItemClickListener 방법 이 없다 는 단점 이 있다.그래서 현재 어댑터 에서 이런 사건 을 처리 하 는 것 이 좋 습 니 다.어댑터 에 항목 을 추가 하거나 제거 하려 면 어댑터 에 명확 하 게 알려 야 합 니 다.이것 은 이전의 notifyDataSetChanged()방법 과 약간 다르다.구체 적 인 조작 은 어댑터 코드 에 나타 날 수 있다.
구체 적 인 코드 는 다음 과 같다.

public class RecyclerAdapter extends RecyclerView.Adapter {

  private List<Model> models;

  public RecyclerAdapter(List<Model> models){
    this.models = models;
  }

  class ViewHolder extends RecyclerView.ViewHolder{

    private ImageView picture;
    private TextView title,text;

    public ViewHolder(View itemView) {
      super(itemView);

      picture = (ImageView) itemView.findViewById(R.id.picture);
      title = (TextView) itemView.findViewById(R.id.title);
      text = (TextView) itemView.findViewById(R.id.text);
    }

    public ImageView getPicture(){
      return picture;
    }

    public TextView getTitle(){
      return title;
    }

    public TextView getText(){
      return text;
    }
  }

  @Override
  public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view,null));
  }

  @Override
  public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

    final ViewHolder vh = (ViewHolder) holder;
    vh.getPicture().setImageResource(models.get(position).getPicture());
    vh.getTitle().setText(models.get(position).getTitle());
    vh.getText().setText(models.get(position).getText());

    //       ,       
    if (mOnItemClickListener != null){
      vh.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          mOnItemClickListener.onItemClick(vh.itemView,position);
        }
      });
    }
  }

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

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

  private OnItemClickListener mOnItemClickListener;

  public void setmOnItemClickListener(OnItemClickListener mOnItemClickListener){
    this.mOnItemClickListener = mOnItemClickListener;
  }
}

7.드 롭 다운 리 셋 과 드 롭 다운 을 더 많이 실현
사실 예전 과 마찬가지 로 네 이 티 브 ListView 나 GridView 는 실제 App 의 수 요 를 만족 시 키 지 못 하고 사용자 정의 View 를 통 해 목록 의 드 롭 다운 리 셋 과 업 로드 를 실현 하 는 경우 가 많 습 니 다.RecyclerView 도 마찬가지 입 니 다.하지만 RecyclerView 를 사용자 정의 하 는 방법 은 소개 하지 않 습 니 다.반대로 저 희 는 Swipe RefreshLayout 이라는 구성 요 소 를 빌 립 니 다.목록 새로 고침 기능 을 빠르게 실현 합 니 다.
인터페이스 레이아웃 은 다음 과 같 습 니 다.

<view
    android:id="@+id/swipeRefreshLayout"
    class="android.support.v4.widget.SwipeRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
      android:id="@+id/recyclerview"
      android:layout_width="match_parent"
      android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>

</view>

드 롭 다운 리 셋 감청 이벤트 설정:

swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
      @Override
      public void onRefresh() {
        //      
        //    swipeRefreshLayout.setRefreshing(false);
      }
});

슬라이드 감청 이벤트 설정 을 통 해 더 많은 로드 를 설정 할 수 있 습 니 다.

recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() {
      @Override
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if (newState == RecyclerView.SCROLL_STATE_IDLE
            && lastVisibleItem + 1 == adapter.getItemCount()) {
          swipeRefreshLayout.setRefreshing(true);

          //      
          //    swipeRefreshLayout.setRefreshing(false);
        }
      }

      @Override
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
      }
    });

8.아 이 템 애 니 메 이 터 와 아 이 템 데 코 레이 터
RecyclerView 에 자체 분할 선 이 없 기 때문에 ItemDecorator 가 나 타 났 습 니 다.그러나 사실은 또 다른 방법 이 있 습 니 다.바로 Item 인터페이스 레이아웃 에 분할 선 을 직접 추가 하면 많은 코드 를 절약 할 수 있 습 니 다.
한편,ItemAnimator 는 쉽게 말 하면 어댑터 에서 받 은 관련 알림 에 따라 애니메이션 의 디 스 플레이 구성 요소 의 수정,추가,삭제 등 을 보 여 줍 니 다.아 이 템 의 애니메이션 을 자동 으로 추가 하고 제거 합 니 다.자체 의 기본 효과 도 좋 고 이미 매우 좋다.이 두 가 지 는 자주 사용 되 지 않 기 때문에 여 기 는 더 이상 소개 하지 않 습 니 다.관심 이 있 는 학생 들 은 인터넷 에서 상세 한 자 료 를 찾 아 공부 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기