Android RecyclerView 기초 지식 상세 설명

5075 단어 AndroidRecyclerView
이번 주 구 글 I/O 대 회 는 안 드 로 이 드 에 대한 고무 적 인 소식 을 많이 가 져 왔 다.아마도 우 리 는 안 드 로 이 드 L 이 도입 한 새로운 것 을 소화 하 는 데 오 랜 시간 이 필요 할 것 이다.
요 며칠 동안 저 는 RecyclerView 를 연구 해 왔 고 지금까지 의 제 성 과 를 여러분 께 공유 하고 싶 습 니 다.
RecyclerView 가 뭐 예요?
RecyclerView 는 어댑터 기반 의 모든 보기 에 비슷 한 렌 더 링 방식 을 제공 하 는 새로운 보기 그룹 입 니 다.이것 은 ListView 와 GridView 컨트롤 의 계승자 로 서 최신 슈퍼 port-V7 버 전에 서 지원 합 니 다.
RecyclerView 를 개발 할 때 확장 성 을 충분히 고려 했 기 때문에 생각 나 는 모든 종류의 레이아웃 을 만 들 수 있 습 니 다.하지만 사용 에 도 다소 불편 하 다.이것 이 바로 안 드 로 이 드―한 가지 일 을 완성 하 는 것 은 결코 쉽 지 않다.
RecyclerView 를 사용 하려 면 다음 세 가지 요 소 를 알 아야 합 니 다.
  • RecyclerView.Adapter
  • LayoutManager
  • ItemAnimator
  • RecyclerView.Adapter
    RecyclerView 는 신형 어댑터 를 포함 하고 있다.이것 은 현재 사용 하고 있 는 어댑터 와 유사 하지만,예 를 들 어 뷰 홀 더 를 사용 해 야 한다.사용 할 때 두 가지 주요 방법 을 다시 써 야 합 니 다.하 나 는 보기 와 소지 자 를 보 여 주 는 것 이 고 다른 하 나 는 보기 에 데 이 터 를 연결 하 는 데 사 용 됩 니 다.이렇게 하 는 것 은 첫 번 째 방법 은 우리 가 진정 으로 새로운 보 기 를 만들어 야 할 때 만 호출 되 는 것 이 며,그것 이 이미 회수 되 었 는 지 검사 할 필요 가 없다 는 것 이다.
    
    ; html-script: false ]
    public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
    
      private List<ViewModel> items;
      private int itemLayout;
    
      public MyRecyclerAdapter(List<ViewModel> items, int itemLayout) {
        this.items = items;
        this.itemLayout = itemLayout;
      }
    
      @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
        return new ViewHolder(v);
      }
    
      @Override public void onBindViewHolder(ViewHolder holder, int position) {
        ViewModel item = items.get(position);
        holder.text.setText(item.getText());
        holder.image.setImageBitmap(null);
        Picasso.with(holder.image.getContext()).cancelRequest(holder.image);
        Picasso.with(holder.image.getContext()).load(item.getImage()).into(holder.image);
        holder.itemView.setTag(item);
      }
    
      @Override public int getItemCount() {
        return items.size();
      }
    
      public static class ViewHolder extends RecyclerView.ViewHolder {
        public ImageView image;
        public TextView text;
    
        public ViewHolder(View itemView) {
          super(itemView);
          image = (ImageView) itemView.findViewById(R.id.image);
          text = (TextView) itemView.findViewById(R.id.text);
        }
      }
    }
    
    
    이것 은 간단 한 어댑터 이지 만 일이 점점 복잡 해 지기 시작 했다.RecyclerView 에 서 는 onItemClickListener 방법 이 하나 도 없습니다(적어도 저 는 발견 하지 못 했 습 니 다).그래서 어댑터 는 사건 을 처리 하 는 좋 은 후보 이다.
    어댑터 에 항목 을 추가 하거나 제거 하려 면 어댑터 에 명확 하 게 알려 야 합 니 다.이것 은 이전의 notifyDataSetChanged()방법 과 약간 다르다.
    
    ; html-script: false ]
    public void add(ViewModel item, int position) {
      items.add(position, item);
      notifyItemInserted(position);
    }
    
    public void remove(ViewModel item) {
      int position = items.indexOf(item);
      items.remove(position);
      notifyItemRemoved(position);
    }
    
    
    LayoutManager
    이 종 류 는 보기 가 화면 에 어느 위치 에 놓 여 있 는 지 를 결정 하지만,이것 은 단지 그것 의 많은 직책 중의 하나 일 뿐이다.그것 은 스크롤 과 순환 이용 을 관리 할 수 있다.
    LayoutManager 는 LinearLayoutManager 라 는 실현 클래스 만 있 고 1500 여 줄 의 코드 가 있 습 니 다.하지만 이 점 에서 얼마나 복잡 한 지 알 수 있다.관리 자 는 목록 보기(가로 와 세로 포함)를 모 의 할 수 있 지만 머 릿 말 과 페이지 끝 이 없습니다.
    Layout Manager 를 위 한 하위 클래스 는 초보 자 에 게 적합 하지 않 습 니 다.저 희 는 커 뮤 니 티 에 의존 하여 RecyclerView 의 모든 잠재력 을 발굴 해 야 합 니 다.이 예 와 함께 짧 은 시간 안에 GridView 컨트롤 의 실현 을 업로드 하 겠 습 니 다.
    이 배후 의 관건 은 LinearLayoutManager 의 코드 를 본 떠 BaseLayoutManager 를 만 들 고 이 를 바탕 으로 확장 하 는 것 이 라 고 생각 합 니 다.아마도 슈퍼 port-v7 의 최종 버 전 은 더 많 고 더 좋 은 실현 을 제공 할 것 이다.
    ItemAnimator
    ItemAnimator 는 어댑터 에서 받 은 알림 에 따라 보기 그룹의 수정 을 애니메이션 으로 표시 합 니 다.기본적으로 항목 추가 와 제거 애니메이션 을 자동 으로 표시 합 니 다.이것 도 간단 한 종류 가 아니 지만,우 리 는 Default ItemAnimator 가 이미 잘 작 동 할 수 있다 는 것 을 발견 했다.
    RecyclerView 설정
    그래서 마지막 으로 실행 중인 RecyclerView 를 초기 화 하려 면 다음 과 같은 일 을 해 야 합 니 다.
    
    ; html-script: false ]
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
    recyclerView.setHasFixedSize(true);
    recyclerView.setAdapter(new MyRecyclerAdapter(createMockList(), R.layout.item));
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    
    setHasFixed Size()방법 은 RecyclerView 를 고정 적 인 크기 로 유지 하 는 데 사 용 됩 니 다.이 정 보 는 자신의 최적화 에 사 용 됩 니 다.
    총결산
    RecyclerView 는 개발 자 에 게 무한 한 확장 능력 을 제공 하 는 강력 한 보기 입 니 다.학습 곡선 은 매우 가 파 를 수 있다.하지만 조만간 안 드 로 이 드 커 뮤 니 티 에서 Layout Manager 의 멋 진 실현 이 발 표 될 것 이 라 고 믿 습 니 다.
    이 예 를 찾 을 수 있 는 github 창 고 를 만 들 고 있 습 니 다.그것 은 내 가 계획 한 확장 라 이브 러 리 의 기초 이다.GridView 의 실현 을 테스트 할 수 있 습 니 다.각종 형식의 피드백 을 환영 합 니 다.

    이상 은 안 드 로 이 드 RecyclerView 의 기초 자료 에 대한 상세 한 설명 입 니 다.추 후 관련 자 료 를 계속 보충 하 겠 습 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기