




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】android之recyclerview的基本使用
Google在推出Android5.0的時候推出了Material
Design,而RecyclerView是Material
Design重要組件之一。當然還有CardView/Palette。 RecyclerView是用來替換傳統(tǒng)的ListView和GridView,瀑布流效果的。是的RecyclerView這一個控件,可以實現(xiàn)這三個效果。雖然在開始使用recyclerview的時候會感到有些男,但是用熟練了會發(fā)現(xiàn)recyclerview十分強大。它可以給每一item里面的控件設(shè)置點擊時間,而不需要擔心事件沖突的問題,如果是使用listview或者是gridview就必須要解決事件沖突,甚至listview或gridview的item只能設(shè)置一個點擊事件,否則就會造成事件沖突,而這些沖突并不好解決。所以recyclerview來了。首先在項目中集成RecyclerView,在build.gradle添加RecyclerView的依賴compile'com.android.support:recyclerview-v7:23.2.1'這樣項目中就集成recyclerview了,AndroidStudio會自動聯(lián)網(wǎng)下載recyclerview包。在activity_main.xml中,使用recyclerview.<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>布局中已經(jīng)有了recyclerview的控件,下面就開始在代碼中編寫。
在這里解釋一下recyclerview的使用。就像listview那樣,recyclerview也需要一個適配器;在我們優(yōu)化listview的時候,我們經(jīng)常會使用到一個內(nèi)部類ViewHolder來保存item中的控件,以便于item的復(fù)用。而現(xiàn)在recyclerview則必須使用ViewHolder。這個ViewHolder必須繼承RecyclerView.ViewHolder,RecyclerView.ViewHolder有一個參數(shù)的構(gòu)造方法,傳入的是一個view,這個view就是recyclerview的item。RecyclerViewHolder:public
class
RecyclerViewHolder
extends
RecyclerView.ViewHolder
{
public
TextView
textView;
public
ImageView
p_w_picpathView;
public
RecyclerViewHolder(View
itemView)
{
super(itemView);
textView
=
(TextView)
itemView.findViewById(R.id.textView);
p_w_picpathView
=
(ImageView)
itemView.findViewById(R.id.p_w_picpathView);
}
}RecyclerViewHolder寫好之后就開始寫Adapter.同樣RecyclerAdapter需要繼承RecyclerView.Adapter<RecyclerViewHolder>,泛型ViewHolder就是自己自定義的RecyclerViewHolder。Adapter的寫法如下:public
class
RecyclerAdapter
extends
RecyclerView.Adapter<RecyclerViewHolder>
{
private
List<Map<String,
String>>
dataList;
public
RecyclerAdapter()
{
dataList
=
new
ArrayList<>();
}
public
void
addAll(List<Map<String,
String>>
data){
dataList.addAll(data);
}
/**
*
*
@param
viewType
對應(yīng)的是getItemViewType(int
position)方法返回的數(shù)值
*/
@Override
public
RecyclerViewHolder
onCreateViewHolder(ViewGroup
parent,
int
viewType)
{
View
view
=
LayoutInflater.from(parent.getContext()).inflate(R.layout.item,
parent,
false);
return
new
RecyclerViewHolder(view);
}
/**
*
*
@param
holder
對應(yīng)的是onCreateViewHolder方法,返回的RecyclerViewHolder
*
@param
position
當前的item的位置
*/
@Override
public
void
onBindViewHolder(RecyclerViewHolder
holder,
int
position)
{
holder.textView.setText(dataList.get(position).get("data"));
}
@Override
public
int
getItemCount()
{
return
dataList.size();
}
}MainActivity中的代碼。public
class
MainActivity
extends
AppCompatActivity
{
private
RecyclerView
recyclerView;
//使用線性布局管理器,設(shè)置的方向orientation是默認,即垂直方向
private
LinearLayoutManager
manager;
//適配器
private
RecyclerAdapter
adapter;
//數(shù)據(jù)源
private
List<Map<String,
String>>
list;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView
=
(RecyclerView)
findViewById(R.id.recyclerView);
manager
=
new
LinearLayoutManager(this);
adapter
=
new
RecyclerAdapter();
//設(shè)置布局管理器
recyclerView.setLayoutManager(manager);
//給recyclerview設(shè)置適配器
recyclerView.setAdapter(adapter);
list
=
new
ArrayList<>();
for
(int
i=0;i<50;i++)
{
Map<String,String>
map
=
new
HashMap<>();
map.put("data",
"item-->
"+i);
list.add(map);
}
adapter.addAll(list);
adapter.notifyDataSetChanged();
}
}recyclerview實現(xiàn)listview的效果就完成了,運行效果:如果是想每個item橫向滑動的話,只需要使用LinearLayoutManager的三個參數(shù)的構(gòu)造方法就行了,newLInearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true)就可以實現(xiàn)橫向滑動的效果了。
recyclerView實現(xiàn)GridView的效果。需要是用是GridLayoutManager。將recyclerView的布局管理器更換成GridLayoutManagermanager=newGridLayoutManager(this,2),效果圖如下:給RecyclerView添加滾動監(jiān)聽。與listView和gridView有寫不同,recyclerView判斷滾動到哪一個位置的餓時候,需要使用到使用到布局管理器(前面設(shè)置的recyclerview.setLayoutManager())。滾動監(jiān)聽的方法有兩個,setOnScrollListener(已不推薦使用)和addOnScrollListener。兩個方法本質(zhì)上是一致的。代碼如下:recyclerView_follow.addOnScrollListener(new
RecyclerView.OnScrollListener()
{
@Override
public
void
onScrollStateChanged(RecyclerView
recyclerView,
int
newState)
{
super.onScrollStateChanged(recyclerView,
newState);
//滾動的狀態(tài)改變時,調(diào)用此方法。
}
@Override
public
void
onScrolled(RecyclerView
recyclerView,
int
dx,
int
dy)
{
super.onScrolled(recyclerView,
dx,
dy);
//屏幕中最下面一個item的所在數(shù)據(jù)源的位置(postion)。
int
lastVisiableItem
=
manager.findLastVisibleItemPosition();
//一共有多少個
int
totalItemCount
=
manager.getItemCount();
//當滑動到倒數(shù)第二個item時,即聯(lián)網(wǎng)獲取下一頁的數(shù)據(jù)
if
(lastVisiableItem
>=
totalItem
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國特種(先進)陶瓷行業(yè)供需狀況與銷售渠道發(fā)展分析研究報告
- 2025-2030中國牛皮紙行業(yè)市場深度調(diào)研及發(fā)展趨勢與投資價值研究報告
- 2025-2030中國牙齒美白套裝行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國牙科CADCAM銑床行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國燃料行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國煤炭物流行業(yè)發(fā)展規(guī)劃及前景趨勢研究報告
- 2025-2030中國焊接防火毯行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030中國熱強化(HS)玻璃市場銷售調(diào)查與前景規(guī)模分析研究報告
- 2025-2030中國熱噴涂粉末行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030中國炭煤行業(yè)市場深度發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 院內(nèi)突發(fā)心跳呼吸驟停、昏迷、跌倒事件應(yīng)急預(yù)案及程序
- 2024年小區(qū)地下車位租賃合同
- 先進個人申報登記表
- 2022-2023學年廣東省江門市新會區(qū)會城鎮(zhèn)城南小學部編版一年級下冊3月月考語文試卷
- 抖音火花合同電子版獲取教程
- 電影賞析綠皮書課件(內(nèi)容詳細)
- 軸線-對話場面的拍攝
- 中國電信營業(yè)廳服務(wù)規(guī)范與基礎(chǔ)管理指導(dǎo)手冊
- 養(yǎng)老護理員培訓(xùn) -職業(yè)道德 法規(guī)
- 湖南省2021年普通高等學校對口招生考試英語
- 控制性詳細規(guī)劃城市用地分類和代號
評論
0/150
提交評論