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 는 쉽게 말 하면 어댑터 에서 받 은 관련 알림 에 따라 애니메이션 의 디 스 플레이 구성 요소 의 수정,추가,삭제 등 을 보 여 줍 니 다.아 이 템 의 애니메이션 을 자동 으로 추가 하고 제거 합 니 다.자체 의 기본 효과 도 좋 고 이미 매우 좋다.이 두 가 지 는 자주 사용 되 지 않 기 때문에 여 기 는 더 이상 소개 하지 않 습 니 다.관심 이 있 는 학생 들 은 인터넷 에서 상세 한 자 료 를 찾 아 공부 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.