Android之 RecyclerView,CardView 詳解和相對應的上拉刷新下拉加載

為什么80%的碼農都做不了架構師?>>> ??hot3.png

隨著 Google 推出了全新的設計語言 Material Design,還迎來了新的 Android 支持庫 v7,其中就包含了 Material Design 設計語言中關于 Card 卡片概念的實現 —— CardView。RecyclerView也是谷歌V7包下新增的控件,用來替代ListView的使用,在RecyclerView標準化了ViewHolder類似于ListView中convertView用來做視圖緩存.

RecyclerView的優點就是,他可以通過設置LayoutManager來快速實現listview、gridview、瀑布流的效果,而且還可以設置橫向和縱向顯示,添加動畫效果等。

CardView實現卡片化效果。

下拉加載使用SwipeRefreshLayout,是官方的下拉刷新控件,簡潔美觀的風格使其廣泛應用在項目中。美中不足的是SwipeRefreshLayout缺少上拉加載的效果,今天結合RecyclerView實現一個支持下拉刷新與上拉加載的SwipeRefreshLayout。

案例包含了:RecyclerView基本使用,RecyclerView上拉刷新下拉加載,RecyclerView多Item布局,CardView基本使用和CardView上拉刷新下拉加載。如圖:(注:第三個案例線顯示格式在模擬器上有問題,手機則沒問題的,手機測試效果更佳)

布局:

<android.support.v7.widget.RecyclerViewandroid:id="@+id/my_recycler_view"android:scrollbars="vertical"android:layout_width="match_parent"android:layout_height="match_parent"/>

Activity:

public class RecyclerViewActivity extends Activity {private RecyclerView recyclerView;private List<String> mDatas;private RecyclerAdapter1 adapter;@SuppressLint("InlinedApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.demo1);initData();initView();}private void initView(){recyclerView=(RecyclerView) findViewById(R.id.demo1_recycler);// 設置布局管理LayoutManagerLinearLayoutManager manager=new LinearLayoutManager(this);//設置水平或者垂直// manager.setOrientation(LinearLayoutManager.HORIZONTAL);recyclerView.setLayoutManager(manager);// (可選)如果可以確定每個item的高度是固定的,設置這個選項可以提高性能recyclerView.setHasFixedSize(true);adapter=new RecyclerAdapter1(this,mDatas);recyclerView.setAdapter(adapter);adapter.setOnItemClickListener(new IOnClickListenter() {@Overridepublic void onItemClick(View view, int position) {Toast.makeText(getApplicationContext(),position+"---"+mDatas.get(position),Toast.LENGTH_LONG).show();}});}private void initData() {mDatas = new ArrayList<String>();for (int i = 0; i <= 50; i++) {mDatas.add("item---" +i);}}}

Adapter:

public class RecyclerAdapter1 extends RecyclerView.Adapter<RecyclerAdapter1.ViewHolder>{private Context context;private List<String> list;public RecyclerAdapter1(Context context, List<String> list){this.context=context;this.list=list;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view= LayoutInflater.from(context).inflate(R.layout.demo1_item,parent,false);ViewHolder viewHolder=new ViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {holder.textView.setText(list.get(position));}@Overridepublic int getItemCount() {return list.size();}private IOnClickListenter onClickListenter=null;public void setOnItemClickListener(IOnClickListenter listener){this.onClickListenter=listener;}public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{private TextView textView;public ViewHolder(View view){super(view);textView=(TextView)view.findViewById(R.id.textview1);textView.setOnClickListener(this);}@Overridepublic void onClick(View v) {if (onClickListenter != null) {onClickListenter.onItemClick(v,getPosition());}}}
}

上拉刷新下拉加載布局

<android.support.v4.widget.SwipeRefreshLayoutandroid:id="@+id/swipeRefreshLayout"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></android.support.v4.widget.SwipeRefreshLayout>

上拉刷新下拉加載Activity

public class RecyclerViewPullActivity extends Activity {private SwipeRefreshLayout swipeRefreshLayout;private MyRefreshRecyclerView recyclerView;public static  List<String> list=new ArrayList<String>();private RecyclerAdapter2 adapter;private Handler mHandler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.demo2);initView();}private void initView(){swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout);recyclerView = (MyRefreshRecyclerView) findViewById(R.id.recycler);adapter=new RecyclerAdapter2();recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));swipeRefreshLayout.setColorSchemeResources(R.color.blue,R.color.green);swipeRefreshLayout.post(new Runnable() {@Overridepublic void run() {swipeRefreshLayout.setRefreshing(true);}});mHandler.postDelayed(new Runnable() {@Overridepublic void run() {getData();recyclerView.setAdapter(adapter);adapter.notifyDataSetChanged();swipeRefreshLayout.setRefreshing(false);}},1500);swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {mHandler.postDelayed(new Runnable() {@Overridepublic void run() {getData();recyclerView.setAdapter(adapter);adapter.notifyDataSetChanged();swipeRefreshLayout.setRefreshing(false);}}, 1500);}});recyclerView.setMyRefreshRecyclerViewListener(new MyRefreshRecyclerView.MyRefreshRecyclerViewListener() {@Overridepublic void onLoadMore() {mHandler.postDelayed(new Runnable() {@Overridepublic void run() {if (list.size() > 14) {recyclerView.setLoadMore(true);} else {int randomInt = new Random().nextInt(100);list.add("上拉加載添加數字:" + randomInt);adapter.notifyDataSetChanged();recyclerView.setLoadMore(false);}}}, 1000);}});}private void getData() {list.clear();Random random = new Random();while (list.size() < 12) {int randomInt = random.nextInt(100);list.add(String.valueOf(randomInt));}}
}

AS添加依賴庫:

  compile 'com.android.support:recyclerview-v7:23.2.1'compile 'com.android.support:cardview-v7:23.2.1'

Eclipse下使用 ? ? RecyclerView.Jar?? ?? ??? CardView.Jar 點擊下載??

由于代碼太多,完整代碼未給出,源碼直接下載即可

源碼點擊下載

轉載于:https://my.oschina.net/zhangqie/blog/833522

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282900.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php獲取郵箱內容嗎,php正則驗證email郵箱及抽取內容中email的例子

1&#xff0c;php正則驗證email格式&#xff1a;復制代碼 代碼示例:if (ereg(“/^[a-z]([a-z0-9]*[-_\.]?[a-z0-9])*([a-z0-9]*[-_]?[a-z0-9])[\.][a-z]{2,3}([\.][a-z]{2})?$/i; ”,$email)){echo “Your email address is correct!”;}else{echo “Please try again!”;}?…

Java——Arrays類操作數組的工具類

JDK中提供了一個專門用于操作數組的工具類&#xff0c;即 Arrays 類&#xff0c;位于 Java。util 包中。該類提供了一系列方法來操作數組&#xff0c;如排序、復制、比較、填充等&#xff0c;用戶直接調用這些方法即可&#xff0c;不需要自己編碼實現&#xff0c;降低了開發難度…

PropertiesUtil 獲取文件屬性值

有時候不要把一些屬性值寫死在代碼中&#xff0c;而是寫在配置在文件中&#xff0c;方便更改 PropertiesUtil工具類&#xff1a;讀取key-value形式的配置文件&#xff0c;根據key獲得value值 1、測試類 public class Test{private static PropertiesUtil propertiesUtil new …

CORS——跨域請求那些事兒

【本期嘉賓介紹】睿得&#xff0c;具有多年研發、運維、安全等IT相關從業經歷。目前從事CDN、存儲、視頻直播點播的技術支持。喜愛鉆研&#xff0c;喜愛編碼&#xff0c;喜愛分享。 在日常的項目開發時會不可避免的需要進行跨域操作&#xff0c;而在實際進行跨域請求時&#xf…

oracle 數據執行計劃,Oracle里常見的執行計劃

本文介紹了Oracle數據庫里常見的執行計劃&#xff0c;使用的Oracle數據庫版本為11.2.0.1。1、與表訪問相關的執行計劃Oracle數據庫里與表訪問有關的兩種方法&#xff1a;全表掃描和ROWID掃描。反映在執行計劃上&#xff0c;與全表掃描對應的執行計劃中的關鍵字是“TABLE ACCESS…

.NET MAUI實戰 Dispatcher

詳細內容這一期分享的內容非常簡單&#xff0c;在之前使用過WPF的開發者對MVVM開發模式下ViewModel中后臺線程轉UI線程并不陌生使用Appplication.Current.Dispatcher。那么在.NET MAUI中也有同樣的機制&#xff0c;存在于.NET MAUI Shell對象中。那么什么是Shell&#xff1f;官…

GDB 配置

GDB 配置 使用 GDB 擴展來配置 GDB 事實上我還是覺得原生的 GDB 就挺好&#xff0c;速度快&#xff0c;需要查看什么執行命令就可以。 GDB DashBoard https://github.com/cyrus-and/gdb-dashboard $sudo mkdir -m 777 ~/gdbinit; cd ~/gdbinit $git clone https://github.com/c…

Oracle區分中文和英文,oracle中中英文段落劃分實現

oracle中關于中文占用字節數&#xff0c;不同的數據庫有不同的情況&#xff0c;有的占用兩個字節、有的占用三個字節&#xff0c;現在測試環境的數據庫中文占用三個字節&#xff0c;要實現由中英文組成的段落字符串&#xff0c;按照每行占用多少字節重新分段&#xff0c;具體應…

未來哪些行業值得加入?

閱讀本文大概需要5分鐘。這個問題很多讀者都問過&#xff0c;基本上每隔幾篇原創就會有人留言問&#xff0c;還有公眾號后臺和知乎私聊。之前在一次留言中我承諾專門開一篇文章來聊聊這個話題&#xff0c;今天想著要兌現這個諾言了。為啥最近會存在這個問題呢&#xff0c;原因其…

虛擬機網絡配置詳解(NAT、橋接、Hostonly)

VirtualBox中有四種網絡連接方式: NATBridged AdapterInternalHost-only AdapterVMWare中有三種&#xff0c;其實它跟VMWare的網絡連接方式都是一樣的概念&#xff0c;只是比VMWare多了Internal方式 在介紹四種工作模式之前&#xff0c;先說下虛擬網卡&#xff0c;虛擬機安裝好…

Oracle收款核銷了怎么撤銷,21應收收款-核銷取消或核銷調整

注&#xff1a;本課程不包含學習下載資料目標人群&#xff1a;1、Oracle ERP/EBS初級顧問和技術顧問&#xff1b; 1、Oracle ERP/EBS用戶熟練學習ERP系統的基本設置功能&#xff1b; 2、Oracle ERP/EBS財務初級顧問的學習&#xff1b; 3、其他對Oracle ERP/EBS有興趣的想轉行如…

微軟宣布正式開源 Azure IoT Edge 邊緣計算服務

開發四年只會寫業務代碼&#xff0c;分布式高并發都不會還做程序員&#xff1f; 微軟宣布&#xff0c;去年年底公開預覽的 Azure IoT Edge 邊緣計算服務已進入官方版&#xff0c;并通過 GitHub 將其開源。Azure IoT Edge 主要將基于云的分析和定制的業務邏輯轉移到邊緣設備&a…

Windows下安裝BeautifulSoup

電腦首先要安裝好了python&#xff0c;我安裝的是2.7。 下面就是bs4的安裝過程了: 1.去官網下載BeautifulSoup4 2017.02.10目前最新版本&#xff1a;Beautiful Soup 4.3.2 2.解壓文件 將下載得到的壓縮包解壓到任意文件夾&#xff0c;路徑不含中文 3.打開cmd命令提示符 winr&am…

BZOJ1578: [Usaco2009 Feb]Stock Market 股票市場

S<50只股票D<10天的價格給出&#xff0c;求第一天開始用n<200000元最后能得到的最大錢數&#xff0c;保證答案<500000。 做D次完全背包即可&#xff0c;每次做完把dp數組清空。 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #i…

OC如何跳到系統設置里的各種設置界面

當 iOS系統版本 < iOS7時 , 只能跳轉到 系統設置頁面 &#xff0c;樓主試了下&#xff0c;非真機是沒有任何效果的 當iOS系統版本 < iOS 10.0 時 NSURL *url [NSURL URLWithString:"prefs:rootLOCATION_SERVICES"]; if( [[UIApplication sharedApplication]can…

oracle 注冊程序,oracle 靜態注冊

1. 最近在裝ASMDATAGUARD&#xff0c; 在靜態注冊上面吃了大虧&#xff0c;現總結如下2. 在Asm環境中&#xff0c;listener監聽器在grid用戶下DGLSN (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST asm)(PORT 1521))))SID_LIST_DGLSN (SID_LIST (SID_DESC (…

Linux下find用法總結

find:實時查找工具&#xff0c;通過遍歷指定起始路徑下的文件系統層級結構完成文件查找:工作特性:查找速度略慢精確查找實時查找用法:find [option] [查找起始路徑][查找條件][處理動作]查找起始路徑&#xff1a;指定具體搜索目標起始路徑&#xff1b;默認為當前目錄查找條件:指…

虛擬DOM Diff算法解析

React中最神奇的部分莫過于虛擬DOM&#xff0c;以及其高效的Diff算法。這讓我們可以無需擔心性能問題而”毫無顧忌”的隨時“刷新”整個頁面&#xff0c;由虛擬DOM來確保只對界面上真正變化的部分進行實際的DOM操作。React在這一部分已經做到足夠透明&#xff0c;在實際開發中我…

生成ID模板:年月日時分秒+6位自增碼

因為生成訂單ID、商品ID 或者什么什么ID的&#xff0c;不想用自增&#xff0c;又怕反復&#xff0c;于是就用 年與日時分秒 6位自增碼 &#xff08;共計20位長度&#xff09;來當作ID 注意&#xff1a;假設你的ID是Long型。就要注意&#xff0c;Long的最大長度為19位&#xf…

oracle optimizer_features_enable,Oracle Optimizer:遷移到使用基于成本的優化器—–系列2.1-數據庫專欄,ORACLE...

oracle optimizer:遷移到使用基于成本的優化器—–系列2.1系列之二包含影響優化器選擇執行計劃的初始化參數和oracle內部隱藏參數&#xff0c;合理設置這些參數對于優化器是相當重要的。6.影響優化器的初始化參數除了生成統計資料之外&#xff0c;下面提及的參數設置在你的系統…