安裝設定
列表或網格中元素的顯示是移動應用程式中非常常見的模式。使用者看到一組專案並可以滾動它們。專案集合可以是列表,網格或資料的其他結構化表示。
RecyclerView
小部件是 ListView 的更高階和靈活的版本。此視窗小部件是一個容器,用於顯示可以通過維護有限數量的檢視而非常有效地滾動的大型資料集。如果資料集合的元素在執行時根據使用者操作或網路事件而更改,請使用 RecyclerView 小部件。
RecyclerView
類通過提供以下內容簡化了大型資料集的顯示和處理:
- 佈局管理器用於定位專案
- 常用項操作的預設動畫,例如刪除或新增項
你還可以靈活地為 RecyclerView
小部件定義自定義佈局管理器和動畫。
要使用 RecyclerView
小部件,你必須指定介面卡和佈局管理器。要建立介面卡,請擴充套件 RecyclerView.Adapter
類。實現的細節取決於資料集的細節和檢視的型別。
佈局管理器將專案檢視放置在 RecyclerView
內,並確定何時重用使用者不再可見的專案檢視。要重用(或回收)檢視,佈局管理器可能會要求介面卡使用與資料集不同的元素替換檢視的內容。以這種方式回收檢視可以避免建立不必要的檢視或執行昂貴的 findViewById()
查詢,從而提高效能。
RecyclerView
提供了這些內建的佈局管理器:
- LinearLayoutManager 在垂直或水平滾動列表中顯示專案。
- GridLayoutManager 顯示網格中的專案。
- StaggeredGridLayoutManager 以交錯網格顯示專案。
要建立自定義佈局管理器,請擴充套件 RecyclerView.LayoutManager 類。
現在要新增 RecyclerView
,你需要在 build.gradle
中新增以下依賴項
dependencies {
compile 'com.android.support:recyclerview-v7:23.4.0'
}
現在在你的佈局中新增一個 RecyclerView
就像這樣。
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
將 RecyclerView
小部件新增到佈局後,獲取物件的控制代碼,將其連線到佈局管理器,並附加適合要顯示的資料的介面卡。
public class MyActivity extends Activity {
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new MyAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
}
...
}
介面卡提供對資料集中專案的訪問,為專案建立檢視,並在原始專案不再可見時用新資料項替換某些檢視的內容。下面的程式碼示例顯示了一個資料集的簡單實現,該資料集由使用 TextView
小部件顯示的字串陣列組成。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset;
// Provide a reference to the views for each data item
// Complex data items may need more than one view per item, and
// you provide access to all the views for a data item in a view holder
public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}
// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
// Create new views (invoked by the layout manager)
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
// set the view's size, margins, paddings and layout parameters
...
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.mTextView.setText(mDataset[position]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
}
首先將支援庫新增到專案中:在應用程式的 build.gradle 檔案中,新增依賴項。
https://developer.android.com/reference/android/widget/ListView.html