RecyclerView

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

RecyclerView 需要實作 RecyclerView.Adapter及Adapter的ViewHolder
// 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
// 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
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的功能
    @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上的元件
class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tv;
        public MyViewHolder(View view) {
            super(view);
            tv = (TextView) view.findViewById(R.id.textView2);
        }
    }
  • 第三步 - 元件之後就可以在onBindViewHolder寫要對元件做的事情了
    @Override
      public void onBindViewHolder(final RecycleViewAdapter.MyViewHolder holder, final int position) {
          // tv就是上面MyViewHolder宣告的TextView
          // holder就是最上面onCreateViewHolder取得到的holder
          holder.tv.setText("Count: "+position);
      }
    
  • 第四步 - 最重要的三步都完成了,再來是更重要的最後一部
    @Override
      public int getItemCount() {
          // 總共執行的次數,這會影響到產生的物件數量,如果這邊給0,那RecyclerView就不會顯示任何東西
          return 20;
      }
    

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

  • 回到MainActivity.java
    // 進行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);

大功告成

results matching ""

    No results matching ""