安卓基礎(十二)

列表-適配器

目標人羣:沒有基礎的安卓初學者
知識點:RecyclerView的使用
目標:用在頁面中使用RecyclerView展示列表數據

簡介

  • RecyclerView的適配器的相關說明

正文

1.在項目中創建一個名爲ItemAdapter.java的類來作爲RecyclerView的適配器,一個最基本的示例如下所示

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.viewHolder> {
    private ArrayList<String> infos = new ArrayList<String>();

    public ItemAdapter(ArrayList<String> infos) {
        this.infos = infos;
    }

    @Override
    public viewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
         View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_card,
                viewGroup, false);
        return new viewHolder(view);
    }

    @Override
    public void onBindViewHolder(viewHolder viewHolder, int position) {
        String info = infos.get(position);
        View view = viewHolder.itemView;
        TextView textView = (TextView) view.findViewById(R.id.info_text);
        textView.setText(info);
    }

    @Override
    public int getItemCount() {
        return infos.size();
    }

    class viewHolder extends RecyclerView.ViewHolder {
        public viewHolder(View itemView) {
            super(itemView);
        }
    }
}
  • 該類繼承自RecyclerView.Adapter,需要傳入一個RecyclerView.ViewHolder的實現類來保證ViewHolder的實現,在本類中爲內部類viewHolder

  • 至少需要實現三個方法,onCreateViewHolder(根據viewType參數創建對應的子view)、onBindViewHolder(將數據根據指定位置綁定到對應位置的viewHolder上)、getItemCount(RecyclerView的長度)

  • onCreateViewHolder可根據不同viewType參數返回不同佈局格式的子View,但需重寫該Adapter的getItemViewType(int position)方法來指定不同位置對應的viewType值

2.MainActivity.java中添加如下代碼

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        // 當每個子View的大小在佈局中不會發生變化時,可以調用本句來提升性能
        mRecyclerView.setHasFixedSize(true);
        // 爲RecyclerView指定一個類型爲LinearLayoutManager的layout manager
        LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
        //創建一個臨時數據源
        ArrayList<String> infos = new ArrayList<String>();
        for (int a = 0; a < 50; a++) {
            infos.add("第" + (a + 1) + "行");
        }
        //創建一個適配器對象
        ItemAdapter itemAdapter = new ItemAdapter(infos);
        //爲Recycleview指定一個適配器對象
        mRecyclerView.setAdapter(itemAdapter);
    }

3.爲了RecyclerView的美觀考慮,應爲每個itemView添加一個行間距,最簡單的方法爲找到item_card.xml在android.support.v7.widget.CardView中添加一個新的屬性(card_view:cardUseCompatPadding=”true”),代碼如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="200dp"
        android:layout_height="200dp"
        card_view:cardUseCompatPadding="true"
        card_view:cardCornerRadius="4dp">

        <TextView
            android:id="@+id/info_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
</LinearLayout>

4.重新Build你的項目並在模擬器上運行,如果可以看到一個縱向的列表,那麼恭喜,本章完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章