Android開(kāi)發(fā)學(xué)習(xí)教程(19)- Android RecyclerView列表用法
—— 放棄不難,但堅(jiān)持一定很酷。
RecyclerView是什么
RecyclerView是一個(gè)和ListView一樣用來(lái)顯示大量數(shù)據(jù)列表但是比ListView更高效的列表控件。關(guān)于ListView的學(xué)習(xí)請(qǐng)見(jiàn)上一篇文章。
RecyclerView有什么用
RecyclerView用來(lái)更高效的展示大量數(shù)據(jù)列表。
RecyclerView怎么用
1. 導(dǎo)入依賴(lài)包
implementation?
'androidx.recyclerview:recyclerview:1.1.0'
2. 布局中加入RecyclerView控件
<
androidx.recyclerview.widget.RecyclerView
????
android:id
=
"@+id/recyclerview"
????
android:layout_width
=
"match_parent"
????
android:layout_height
=
"match_parent"
?/>
3. 實(shí)例化RecycleView并設(shè)置布局方式
RecyclerView recyclerView = findViewById(R.id.recyclerview);
LinearLayoutManager layoutManager =?
new
?LinearLayoutManager(
this
);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
其中LinearLayoutManager就是類(lèi)似ListView的功能,列表上下滾動(dòng)(LinearLayoutManager.VERTICAL)或者左右滾動(dòng)(LinearLayoutManager.VERTICAL)。除了可以設(shè)置為L(zhǎng)inearLayoutManager還可以設(shè)置GridLayoutManager、StaggeredGridLayoutMnager,GridLayoutManager是網(wǎng)格擺放,而StaggeredGridLayoutMnager則是瀑布流擺放。
4. 獲取數(shù)據(jù),定義自己的數(shù)據(jù)適配器并設(shè)置到RecyclerView上
自定義BaseAdapter可以展示任意類(lèi)型的數(shù)據(jù)列表項(xiàng),其實(shí)上面SimpleAdapter和ArrayAdapter都是繼承自BaseAdapter,區(qū)別在于getView方法,SimpleAdapter和ArrayAdapter的getView讀者可以自行查看源碼,基本和上面截取的一小段差不多。我們來(lái)看自定義BaseAdapter的用法:
????
// 獲取數(shù)據(jù),這里模擬獲取到了20條數(shù)據(jù)
????
stringList =?
new
?ArrayList<>();
????
for
?(
int
?i =?
0
; i <?
20
; i++) {
????????
stringList.add(
"Item"
?+ i);
????
}
????
recyclerView.setAdapter(
new
?MyAdapter());
????
// 定義自己的數(shù)據(jù)適配器
????
class
?MyAdapter?
extends
?RecyclerView.Adapter<myadapter.myviewholder> {
????????
@NonNull
????????
@Override
????????
public
?MyAdapter.MyViewHolder onCreateViewHolder(
@NonNull
?ViewGroup parent,?
int
?viewType) {
????????????
View itemView = LayoutInflater.from(MainActivity.
this
).inflate(R.layout.item_recyclerview, parent,?
false
);
????????????
return
?new
?MyViewHolder(itemView);
????????
}
????????
@Override
????????
public
?void
?onBindViewHolder(
@NonNull
?MyAdapter.MyViewHolder holder,?
int
?position) {
????????????
holder.tvName.setText(stringList.get(position));
????????
}
????????
@Override
????????
public
?int
?getItemCount() {
????????????
return
?stringList ==?
null
???
0
?: stringList.size();
????????
}
????
// 定義緩存ViewHolder
????????
class
?MyViewHolder?
extends
?RecyclerView.ViewHolder {
????????????
public
?TextView tvName;
????????????
public
?MyViewHolder(View itemView) {
????????????????
super
(itemView);
????????????????
tvName = itemView.findViewById(R.id.tv_name);
????????????????
tvName.setOnClickListener(
new
?View.OnClickListener() {
????????????????????
@Override
????????????????????
public
?void
?onClick(View v) {
????????????????????????
Toast.makeText(MainActivity.
this
, tvName.getText(), Toast.LENGTH_SHORT).show();
????????????????????
}
????????????????
});
????????????
}
????????
}
????
}
</myadapter.myviewholder>
運(yùn)行效果:
源碼鏈接:https://yunjunet.cn/876790.html