安卓基礎(十二)

來源:互聯網
上載者:User

標籤:適配器   安卓   

列表-適配器

  • 列表-適配器
    • 簡介
    • 本文

目標人群:沒有基礎的安卓初學者
知識點: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你的項目並在模擬器上運行,如果可以看到一個縱向的列表,那麼恭喜,本章完成。

安卓基礎(十二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.