XRecyclerView實(shí)現(xiàn)下拉刷新、滾動(dòng)到底部加載更多等功能
介紹:
一個(gè)實(shí)現(xiàn)了下拉刷新,滾動(dòng)到底部加載更多以及添加header功能的的RecyclerView。使用方式和RecyclerView完全一致,不需要額外的layout,不需要寫特殊的adater。 加載效果內(nèi)置了AVLoadingIndicatorView上的所有效果,可以根據(jù)需要指定。
項(xiàng)目地址:https://github.com/jianghejie/XRecyclerView
效果:
使用:
xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/recyclerview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
2.MainActivity
package com.example.xrecyclerview; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.jcodecraeer.xrecyclerview.ProgressStyle; import com.jcodecraeer.xrecyclerview.XRecyclerView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private XRecyclerView mRecyclerView; private MyAdapter mAdapter; private ArrayList<String> listData; private int refreshTime = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (XRecyclerView)this.findViewById(R.id.recyclerview); LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader); mRecyclerView.setLaodingMoreProgressStyle(ProgressStyle.Pacman); mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey); View header = LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false); mRecyclerView.addHeaderView(header); mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { refreshTime ++; new Handler().postDelayed(new Runnable(){ public void run() { listData.clear(); for(int i = 0; i < 15 ;i++){ listData.add("item" + i + "after " + refreshTime + " times of refresh"); } mAdapter.notifyDataSetChanged(); mRecyclerView.refreshComplete(); } }, 3000); //refresh data here } @Override public void onLoadMore() { new Handler().postDelayed(new Runnable(){ public void run() { for(int i = 0; i < 15 ;i++){ listData.add("item" + (i + listData.size()) ); } mAdapter.notifyDataSetChanged(); mRecyclerView.loadMoreComplete(); } }, 3000); } }); listData = new ArrayList<String>(); mAdapter = new MyAdapter(listData); for(int i = 0; i < 15 ;i++){ listData.add("item" + i); } mRecyclerView.setAdapter(mAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
3. adapter
package com.example.xrecyclerview; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; /** * Created by jianghejie on 15/11/26. */ public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { public ArrayList<String> datas = null; public MyAdapter(ArrayList<String> datas) { this.datas = datas; } //創(chuàng)建新View,被LayoutManager所調(diào)用 @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false); ViewHolder vh = new ViewHolder(view); return vh; } //將數(shù)據(jù)與界面進(jìn)行綁定的操作 @Override public void onBindViewHolder(ViewHolder viewHolder, int position) { viewHolder.mTextView.setText(datas.get(position)); } //獲取數(shù)據(jù)的數(shù)量 @Override public int getItemCount() { return datas.size(); } //自定義的ViewHolder,持有每個(gè)Item的的所有界面元素 public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(View view){ super(view); mTextView = (TextView) view.findViewById(R.id.text); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中使用RecyclerView實(shí)現(xiàn)下拉刷新和上拉加載
- Android RecyclerView實(shí)現(xiàn)下拉刷新和上拉加載
- Android RecyclerView 上拉加載更多及下拉刷新功能的實(shí)現(xiàn)方法
- 詳解Recyclerview item中有EditText使用刷新遇到的坑
- Android使用recyclerview打造真正的下拉刷新上拉加載效果
- android RecyclerView側(cè)滑菜單,滑動(dòng)刪除,長(zhǎng)按拖拽,下拉刷新上拉加載
- Android使用RecyclerView實(shí)現(xiàn)自定義列表、點(diǎn)擊事件以及下拉刷新
- Android RecyclerView的刷新分頁(yè)的實(shí)現(xiàn)
- Android RecyclerView下拉刷新和上拉加載更多
- RecyclerView使用payload實(shí)現(xiàn)局部刷新
相關(guān)文章
Android多渠道打包時(shí)獲取當(dāng)前渠道的方法
這篇文章主要介紹了Android多渠道打包時(shí)獲取當(dāng)前渠道的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01簡(jiǎn)單實(shí)現(xiàn)Android鬧鐘程序 附源碼
這篇文章主要幫助大家簡(jiǎn)單實(shí)現(xiàn)Android鬧鐘程序,附源碼下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07Kotlin Service服務(wù)組件開發(fā)詳解
這幾天分析了一下的啟動(dòng)過程,于是乎,今天寫一下Service使用; 給我的感覺是它并不復(fù)雜,千萬(wàn)不要被一坨一坨的代碼嚇住了,雖然彎彎繞繞不少,重載函數(shù)一個(gè)接著一個(gè),就向走迷宮一樣,但只要抓住主線閱讀,很快就能找到出口2022-12-12實(shí)例詳解Android 獲取短信會(huì)話列表
本文通過實(shí)例詳解android獲取短信會(huì)話列表的全部?jī)?nèi)容,涉及到android獲取短信列表的相關(guān)知識(shí),對(duì)android會(huì)話列表相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12實(shí)例詳解Android Selector和Shape的用法
shape和selector是Android UI設(shè)計(jì)中經(jīng)常用到的,比如我們要自定義一個(gè)圓角Button,點(diǎn)擊Button有些效果的變化,就要用到shape和selector,通過本文結(jié)合代碼實(shí)例給大家詳解Android Selector和Shape的用法,感興趣的朋友一起學(xué)習(xí)吧2016-01-01Android ToggleButton 詳解及實(shí)例代碼
這篇文章主要介紹了Android ToggleButton 詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02Android實(shí)現(xiàn)懸浮可拖拽的Button
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)懸浮可拖拽的Button,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Android實(shí)現(xiàn)連續(xù)點(diǎn)擊多次事件的代碼詳解
小編經(jīng)常遇到這樣的需求類似進(jìn)入開發(fā)者模式,即多次點(diǎn)擊后執(zhí)行操作。下面小編通過實(shí)例代碼給大家講解Android實(shí)現(xiàn)連續(xù)點(diǎn)擊多次事件的相關(guān)知識(shí),感興趣的朋友跟隨小編一起學(xué)習(xí)吧2018-10-10