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