国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中使用RecyclerView實現下拉刷新和上拉加載

2020-01-02 07:01:14
字體:
來源:轉載
供稿:網友

推薦閱讀:使用RecyclerView添加Header和Footer的方法

                      RecyclerView的使用之HelloWorld

RecyclerView 是Android L版本中新添加的一個用來取代ListView的SDK,它的靈活性與可替代性比listview更好。本文給大家介紹如何為RecyclerView添加下拉刷新和上拉加載,過去在ListView當中添加下拉刷新和上拉加載是非常方便的利用addHeaderView和addFooterView,RecyclerView的刷新同樣也是需要靠List當中添加Head或Foot來實現的。本篇不會詳細告訴你怎么去做一個下拉刷新和加載的效果,而是如何快速利用現有的知名開源庫來為RecyclerView實現下面的效果。

先給大家展示下效果圖,感興趣的朋友請繼續閱讀全文。

這里寫圖片描述

這個下拉刷新不是靠List當中添加HeaderView來實現的,而是在RecyclerView外面套了一層ViewGroup而這個ViewGroup支持下拉刷新,可以靈巧的實現一些子View的下拉刷新,這個就是大名鼎鼎的android-Ultra-Pull-To-Refresh開源庫,作者liaohuqiu,但是很遺憾它不支持上拉加載,本篇用的是在這個庫基礎上進行了拓展并實現了上拉加載效果的開源庫,上拉的效果實現是靠RecyclerView里添加FooterView,Github地址:https://github.com/Chanven/CommonPullToRefresh 感謝活躍在開源社區的開發者們。

具體的實現步驟:(開發工具:Android Studio)

1:Gradle配置 build.gradle

//可選 或者在上面地址中下載library源代碼copy到項目里面compile 'com.chanven.lib:cptr:1.0.0' // RecyclerView和CardViewcompile 'com.android.support:recyclerview-v7:23.1.1'compile 'com.android.support:cardview-v7:23.1.1'

2:主布局文件 activity_main.xml 里面一個RecyclerView 外面嵌套的是支持下拉刷新的ViewGroup

<?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.PtrClassicFrameLayoutandroid: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.RecyclerViewandroid: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:列表項布局 rv_item.xml 外面一個CardView的卡片式容器,里面一個TextView

<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardViewxmlns: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"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid: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的布局;@Overridepublic NormalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {return new NormalViewHolder(mLayoutInflater.inflate(R.layout.rv_item,parent,false));}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {NormalViewHolder viewholder = (NormalViewHolder) holder;viewholder.mTextView.setText(mTitle.get(position));}//獲取數據的數量@Overridepublic int getItemCount() {return mTitle==null ? 0 : mTitle.size();}}

5:最重要的Activity的實現,MainActivity.java,代碼含義已經注釋

public class MainActivity extends AppCompatActivity {private RecyclerView mRecyclerView;//支持下拉刷新的ViewGroupprivate PtrClassicFrameLayout mPtrFrame;//List數據private List<String> title = new ArrayList<>();//RecyclerView自定義Adapterprivate RvAdapter adapter;//添加Header和Footer的封裝類private RecyclerAdapterWithHF mAdapter;@Overrideprotected 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 falsemPtrFrame.setPullToRefresh(false);// default is truemPtrFrame.setKeepHeaderWhenRefresh(true);//進入Activity就進行自動下拉刷新mPtrFrame.postDelayed(new Runnable() {@Overridepublic void run() {mPtrFrame.autoRefresh();}}, 100);//下拉刷新mPtrFrame.setPtrHandler(new PtrDefaultHandler() {@Overridepublic 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() {@Overridepublic void loadMore() {//模擬聯網延遲更新數據new Handler().postDelayed(new Runnable() {@Overridepublic 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);}});}}

以上內容是小編給大家介紹的Android中使用RecyclerView實現下拉刷新和上拉加載教程,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上杭县| 水富县| 犍为县| 青川县| 綦江县| 乌兰县| 安岳县| 洛阳市| 承德县| 六安市| 巴塘县| 腾冲县| 固阳县| 柘城县| 阜康市| 历史| 蛟河市| 都安| 永昌县| 广饶县| 海林市| 元朗区| 河池市| 广灵县| 石嘴山市| 汉寿县| 台南市| 上饶市| 娱乐| 临漳县| 阿拉善右旗| 青阳县| 屏南县| 诸暨市| 南安市| 南京市| 同心县| 静乐县| 双鸭山市| 辛集市| 徐汇区|