最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中使用RecyclerView實現(xiàn)下拉刷新和上拉加載

 更新時間:2016年03月09日 09:27:34   作者:李濟洲  
RecyclerView 是Android L版本中新添加的一個用來取代ListView的SDK,它的靈活性與可替代性比listview更好。這篇文章主要介紹了Android中使用RecyclerView實現(xiàn)下拉刷新和上拉加載的相關資料,需要的朋友可以參考下

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

                      RecyclerView的使用之HelloWorld

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

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

這里寫圖片描述

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

具體的實現(xiàn)步驟:(開發(fā)工具: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:主布局文件 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.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:列表項布局 rv_item.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);
}
}
//在該方法中我們創(chuàng)建一個ViewHolder并返回,ViewHolder必須有一個帶有View的構造函數(shù),這個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));
}
//獲取數(shù)據(jù)的數(shù)量
@Override
public int getItemCount() {
return mTitle==null ? 0 : mTitle.size();
}
}

5:最重要的Activity的實現(xiàn),MainActivity.java,代碼含義已經(jīng)注釋

public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
//支持下拉刷新的ViewGroup
private PtrClassicFrameLayout mPtrFrame;
//List數(shù)據(jù)
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();
//模擬數(shù)據(jù)
for (int i = 0; i <= 5; i++) {
title.add(String.valueOf(i));
}
//模擬聯(lián)網(wǎng) 延遲更新列表
new Handler().postDelayed(new Runnable() {
public void run() {
mAdapter.notifyDataSetChanged();
mPtrFrame.refreshComplete();
mPtrFrame.setLoadMoreEnable(true);
}
}, 1000);
}
});
//上拉加載
mPtrFrame.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void loadMore() {
//模擬聯(lián)網(wǎng)延遲更新數(shù)據(jù)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//模擬數(shù)據(jù)
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);
}
});
}
}

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

相關文章

  • Android開發(fā)實現(xiàn)圓形圖片功能示例

    Android開發(fā)實現(xiàn)圓形圖片功能示例

    這篇文章主要介紹了Android開發(fā)實現(xiàn)圓形圖片功能,涉及Android實現(xiàn)圓形圖片的界面布局與CirImageView組件相關使用操作技巧,需要的朋友可以參考下
    2019-04-04
  • Android RecyclerView實現(xiàn)點擊條目刪除

    Android RecyclerView實現(xiàn)點擊條目刪除

    這篇文章主要為大家詳細介紹了Android RecyclerView實現(xiàn)點擊條目刪除,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • android 中ProgressDialog實現(xiàn)全屏效果的示例

    android 中ProgressDialog實現(xiàn)全屏效果的示例

    本篇文章主要介紹了android 中ProgressDialog實現(xiàn)全屏效果的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 基于Android10渲染Surface的創(chuàng)建過程

    基于Android10渲染Surface的創(chuàng)建過程

    這篇文章主要介紹了基于Android10渲染Surface的創(chuàng)建過程,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Android仿微信發(fā)朋友圈瀏覽圖片效果

    Android仿微信發(fā)朋友圈瀏覽圖片效果

    這篇文章主要介紹了Android仿微信發(fā)朋友圈瀏覽圖片效果的相關資料,需要的朋友可以參考下
    2016-01-01
  • Android TabWidget切換卡的實現(xiàn)應用

    Android TabWidget切換卡的實現(xiàn)應用

    本篇文章小編為大家介紹,Android TabWidget切換卡的實現(xiàn)應用。需要的朋友參考下
    2013-04-04
  • Android中LayoutAnimal的使用方法詳解

    Android中LayoutAnimal的使用方法詳解

    這篇文章給大家講講酷炫的動畫成員LayoutAnimal,文章通過一個實例給大家詳細介紹了Android中LayoutAnimal的使用方法,感興趣的小伙伴可以自己動手試一試
    2023-09-09
  • Android Flutter實現(xiàn)五種酷炫文字動畫效果詳解

    Android Flutter實現(xiàn)五種酷炫文字動畫效果詳解

    animated_text_kit這一動畫庫有多種文字動畫效果,文中將利用它實現(xiàn)五種酷炫的文字動畫:波浪涌動效果、波浪線跳動文字組、彩虹動效、滾動廣告牌效果和打字效果,需要的可以參考一下
    2022-03-03
  • Flutter上的數(shù)據(jù)監(jiān)控深入理解

    Flutter上的數(shù)據(jù)監(jiān)控深入理解

    這篇文章主要給大家介紹了關于Flutter上的數(shù)據(jù)監(jiān)控的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Flutter具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • 如何解決android Toast重復顯示

    如何解決android Toast重復顯示

    Toast是一種簡易的消息提示框,它無法獲取焦點,按設置的時間來顯示完以后會自動消失,一般用于幫助或提示,本文給大家介紹android Toast重復顯示的解決辦法,涉及到android toast 相關知識,有需要的朋友參考下
    2016-01-01

最新評論

宣汉县| 阆中市| 黄龙县| 华池县| 依安县| 淄博市| 古蔺县| 武胜县| 梁平县| 昭通市| 三原县| 贵南县| 甘谷县| 尉犁县| 江口县| 远安县| 娄烦县| 马关县| 高安市| 平和县| 东城区| 郴州市| 黄浦区| 姚安县| 泰和县| 岳普湖县| 基隆市| 娱乐| 衡阳县| 永吉县| 纳雍县| 孝义市| 慈利县| 女性| 大冶市| 共和县| 泸溪县| 德令哈市| 横峰县| 顺昌县| 大邑县|