【移動應(yīng)用開發(fā)技術(shù)】android之recyclerview的基本使用_第1頁
【移動應(yīng)用開發(fā)技術(shù)】android之recyclerview的基本使用_第2頁
【移動應(yīng)用開發(fā)技術(shù)】android之recyclerview的基本使用_第3頁
【移動應(yīng)用開發(fā)技術(shù)】android之recyclerview的基本使用_第4頁
【移動應(yīng)用開發(fā)技術(shù)】android之recyclerview的基本使用_第5頁
免費預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論