Android 에 서 는 RecyclerView 를 사용 하여 드 롭 다운 리 셋 과 업 로드 를 실현 합 니 다.

추천 읽 기:RecyclerView 로 Header 와 Footer 를 추가 하 는 방법
                      RecyclerView 의 사용 HelloWorld
RecyclerView 는 Android L 버 전에 새로 추 가 된 ListView 를 대체 하 는 SDK 로 서,listview 보다 유연성 과 대체 가능성 이 더 좋다.본 고 는 RecyclerView 에 드 롭 다운 리 셋 과 상 라 로 딩 을 추가 하 는 방법 을 소개 한다.과거 에 ListView 에 드 롭 다운 리 셋 과 상 라 로 딩 을 추가 하 는 것 은 addHeaderView 와 addFooter View 를 편리 하 게 이용 하 는 것 이 었 다.RecyclerView 의 리 셋 역시 List 에 Head 나 Foot 를 추가 하여 이 루어 져 야 했다.이 편 은 드 롭 다운 리 셋 과 로 딩 효 과 를 어떻게 만 드 는 지 자세히 알려 주지 않 고 기 존의 유명 오픈 소스 라 이브 러 리 를 이용 하여 RecyclerView 에 다음 효 과 를 실현 하 는 방법 을 알려 준다.
먼저 효과 도 를 보 여 드 리 겠 습 니 다.관심 있 는 분 들 은 전문 을 계속 읽 어 주세요.
这里写图片描述
이 드 롭 다운 리 셋 은 List 에 HeaderView 를 추가 하여 이 루어 진 것 이 아니 라 RecyclerView 밖 에 View Group 을 설치 한 것 입 니 다.이 View Group 은 드 롭 다운 리 셋 을 지원 합 니 다.서브 View 의 드 롭 다운 리 셋 을 교묘 하 게 실현 할 수 있 습 니 다.이것 이 바로 유명한 안 드 로 이 드-Ultra-Pull-To-Refresh 오픈 소스 라 이브 러 리 입 니 다.작가 liaohuqiu 이지 만 안 드 로 우 드 로 딩 을 지원 하지 않 습 니 다.본 고 는 이 라 이브 러 리 를 바탕 으로 확장 하고 로드 효 과 를 실현 하 는 오픈 소스 라 이브 러 리 를 사 용 했 습 니 다.위로 끌 어 올 리 는 효 과 는 RecyclerView 에 Footer View 를 추가 하 는 것 입 니 다.Github 주소:https://github.com/Chanven/CommonPullToRefresh오픈 소스 커 뮤 니 티 에서 활동 하 는 개발 자 들 에 게 감 사 드 립 니 다.
구체 적 인 실현 절차:(개발 도구:Android Studio)
1:Gradle 설정 build.gradle

//             library   copy     
compile 'com.chanven.lib:cptr:1.0.0' 
// RecyclerView CardView
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.1.1'
2:주 레이아웃 파일 activitymain.xml 에 RecyclerView 가 내장 되 어 있 는 것 은 드 롭 다운 새로 고침 을 지원 하 는 View Group 입 니 다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.chanven.lib.cptr.PtrClassicFrameLayout
android:id="@+id/rotate_header_list_view_frame"
xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e1e1e1"
cube_ptr:ptr_duration_to_close="200"
cube_ptr:ptr_duration_to_close_header="1000"
cube_ptr:ptr_keep_header_when_refresh="true"
cube_ptr:ptr_pull_to_fresh="false"
cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"
cube_ptr:ptr_resistance="1.7">
<android.support.v7.widget.RecyclerView
android:background="#ffffff"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rv_list"
/>
</com.chanven.lib.cptr.PtrClassicFrameLayout>
</LinearLayout>
3:목록 항목 레이아웃 rvitem.xml 밖 에 CardView 의 카드 용기,안에 TextView 가 있 습 니 다.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:id="@+id/cv_item"
android:foreground="?android:attr/selectableItemBackground"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_item_text"
android:text="test"
android:layout_margin="8dp"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
4:RecyclerView 의 Adapter RvAdapter.java

public class RvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private LayoutInflater mLayoutInflater;
private Context mContext;
private List <String> mTitle;
public RvAdapter(Context context,List<String> title){
mContext=context;
mTitle=title;
mLayoutInflater=LayoutInflater.from(context);
}
//    ViewHolder,    Item        
public static class NormalViewHolder extends RecyclerView.ViewHolder {
TextView mTextView;
CardView mCardView;
public NormalViewHolder(View itemView) {
super(itemView);
mTextView=(TextView)itemView.findViewById(R.id.tv_item_text);
mCardView=(CardView)itemView.findViewById(R.id.cv_item);
}
}
//           ViewHolder   ,ViewHolder       View     ,  View    Item    ,          Item   ;
@Override
public NormalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new NormalViewHolder(mLayoutInflater.inflate(R.layout.rv_item,parent,false));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
NormalViewHolder viewholder = (NormalViewHolder) holder;
viewholder.mTextView.setText(mTitle.get(position));
}
//       
@Override
public int getItemCount() {
return mTitle==null ? 0 : mTitle.size();
}
}
5:가장 중요 한 Activity 의 실현,MainActivity.java,코드 의 미 는 설명 되 어 있 습 니 다.

public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
//       ViewGroup
private PtrClassicFrameLayout mPtrFrame;
//List  
private List<String> title = new ArrayList<>();
//RecyclerView   Adapter
private RvAdapter adapter;
//  Header Footer    
private RecyclerAdapterWithHF mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);
adapter = new RvAdapter(MainActivity.this, title);
mAdapter = new RecyclerAdapterWithHF(adapter);
mRecyclerView.setAdapter(mAdapter);
mPtrFrame = (PtrClassicFrameLayout) findViewById(R.id.rotate_header_list_view_frame);
//        
mPtrFrame.setLastUpdateTimeRelateObject(this);
//               
mPtrFrame.setResistance(1.7f);
mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);
mPtrFrame.setDurationToClose(200);
mPtrFrame.setDurationToCloseHeader(1000);
// default is false
mPtrFrame.setPullToRefresh(false);
// default is true
mPtrFrame.setKeepHeaderWhenRefresh(true);
//  Activity         
mPtrFrame.postDelayed(new Runnable() {
@Override
public void run() {
mPtrFrame.autoRefresh();
}
}, 100);
//    
mPtrFrame.setPtrHandler(new PtrDefaultHandler() {
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
title.clear();
//    
for (int i = 0; i <= 5; i++) {
title.add(String.valueOf(i));
}
//           
new Handler().postDelayed(new Runnable() {
public void run() {
mAdapter.notifyDataSetChanged();
mPtrFrame.refreshComplete();
mPtrFrame.setLoadMoreEnable(true);
}
}, 1000);
}
});
//    
mPtrFrame.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void loadMore() {
//          
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//    
for (int i = 0; i <= 5; i++) {
title.add(String.valueOf(i));
}
mAdapter.notifyDataSetChanged();
mPtrFrame.loadMoreComplete(true);
Toast.makeText(MainActivity.this, "load more complete", Toast.LENGTH_SHORT)
.show();
}
}, 1000);
}
});
}
}
이상 의 내용 은 편집장 이 소개 한 안 드 로 이 드 에서 RecyclerView 를 사용 하여 드 롭 다운 리 셋 과 업 로드 튜 토리 얼 을 실현 하 는 것 입 니 다.도움 이 되 셨 으 면 합 니 다!

좋은 웹페이지 즐겨찾기