How to use RecyclerView

RecyclerView

類似ListView及GridView,甚至能夠取代他們

RecyclerView 需要實作 RecyclerView.Adapter及Adapter的ViewHolder
1
2
3
4
5
6
7
8
9
10
11
12
// activity_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycleview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
拉好RecyclerView元件之後,還要建立item
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textColor="#111111"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
介面都完成後,就要開始打程式囉!
  • 首先建立一個RecyclerViewAdapter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.MyViewHolder> {
public RecycleViewAdapter(Context context) {
this.context = context;
}
// 這部份主要寫綁定layout的程式
@Override
public RecycleViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return null;
}
// 上面綁定layout後,在這裡實作物件功能
@Override
public void onBindViewHolder(final RecycleViewAdapter.MyViewHolder holder, final int position) {
}
// 執行的總次數
@Override
public int getItemCount() {
return 0;
}
// 自己寫ViewHolder來綁定控件
class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(View view) {
super(view);
}
}

建立好之後就一個一個來修改囉

  • 第一步 - 這個CreateViewHolder是當item被建立的時候會執行一次,這裡通常做綁定layout的功能

    1
    2
    3
    4
    5
    @Override
    public RecycleViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item,parent,false));
    return holder;
    }
  • 第二步 - 取得holder之後,需要自己寫一個class -> MyViewHolder來獲得layout上的元件

1
2
3
4
5
6
7
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.textView2);
}
}
  • 第三步 - 元件之後就可以在onBindViewHolder寫要對元件做的事情了

    1
    2
    3
    4
    5
    6
    @Override
    public void onBindViewHolder(final RecycleViewAdapter.MyViewHolder holder, final int position) {
    // tv就是上面MyViewHolder宣告的TextView
    // holder就是最上面onCreateViewHolder取得到的holder
    holder.tv.setText("Count: "+position);
    }
  • 第四步 - 最重要的三步都完成了,再來是更重要的最後一部

    1
    2
    3
    4
    5
    @Override
    public int getItemCount() {
    // 總共執行的次數,這會影響到產生的物件數量,如果這邊給0,那RecyclerView就不會顯示任何東西
    return 20;
    }

完成了之後,我們需要把RecyclerViewAdapter指定給RecyclerView

  • 回到MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
// 進行RecyclerView物件綁定
RecyclerView mRecyclerView = (RecyclerView) view.findViewById(R.id.recycleview);
// 棋盤式
//RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this,4);
// 瀑布式
//RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);
// 線性 ( 這裡用線性做範例 )
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
RecycleViewAdapter mAdapter = new RecycleViewAdapter(this);
mRecyclerView.setAdapter(mAdapter);

大功告成

文章目錄
  1. 1. RecyclerView
    1. 1.0.0.1. RecyclerView 需要實作 RecyclerView.Adapter及Adapter的ViewHolder
    2. 1.0.0.2. 拉好RecyclerView元件之後,還要建立item
    3. 1.0.0.3. 介面都完成後,就要開始打程式囉!
  2. 1.0.1. 建立好之後就一個一個來修改囉
  3. 1.0.2. 完成了之後,我們需要把RecyclerViewAdapter指定給RecyclerView
  4. 1.0.3. 大功告成
|