組件RecyclerView的應用(一),組件recyclerview
首先我們知道RecyclerView組件是ListView的升級版,今天先介紹基礎的RecyclerView的基本布局RecyclerView.Adapter和LayoutManager
第一:
LayoutManager
我們知道ListView只能在垂直方向上滾動,Android API沒有提供ListView在水平方向上面滾動的支援。或許有多種方式實現水平滑動,ListView並不是設計來做這件事情的。但是RecyclerView相較於ListView,在滾動上面的功能擴充了許多。它可以支援多種類型列表的展示要求,主要如下:
LinearLayoutManager ,可以支援水平和豎直方向上滾動的列表。
StaggeredGridLayoutManager ,可以支援交叉網格風格的列表,類似於瀑布流或者Pinterest。
GridLayoutManager ,支援網格展示,可以水平或者豎直滾動,如展示圖片的畫廊。
因此RecyclerView相對於ListView來說自訂性擴充了很多
第二:
RecyclerView.Adapter和ListView的BaseAdapter不同之處在於:BaseAdapter都是在getView一個方法中實現的,包括View的執行個體化以及組件的綁定。在RecyclerView.Adapter中,則提供了RecyclerView.ViewHolder機制,這個類必須我們自己定義,主要是用來儲存視圖的類,主要在onCreateViewHolder中實現View的儲存
public static class ViewHolder extends RecyclerView.ViewHolder
{
public TextView itemText;
public ViewHolder(View itemView) {
super(itemView);
itemText = (TextView)findViewById(R.id.item_text);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.item_recyclerview,parent,false);
return new ViewHolder(view);
}
另外還需要實現getCount()方法,也就是返回item的數量,另外 onBindViewHolder()方法實現對應的組件和資料繫結
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
((ViewHolder)holder).itemText.setText(titleList.get(position));
}
以下為我寫的基本實現RecyclerView功能的一段小代碼
/**
適配器類
**/
public class RecyclerAdapter extends RecyclerView.Adapter { private List<String> titleList; private LayoutInflater layoutInflater; public RecyclerAdapter(Context context) { this.titleList = new ArrayList<>(); for(int i=0;i<30;i++) { titleList.add("item"+i); } layoutInflater = LayoutInflater.from(context); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = layoutInflater.inflate(R.layout.item_recyclerview,parent,false); return new ViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((ViewHolder)holder).itemText.setText(titleList.get(position)); } @Override public int getItemCount() { return titleList.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { //public TextView itemText; public ViewHolder(View itemView) { super(itemView); } }}
/**
主介面代碼
**/
mRecyclerView = (RecyclerView)pageList.get(SPORT).findViewById(R.id.recyclerview); mRecyclerView.setHasFixedSize(true); mLinearLayoutManager = new LinearLayoutManager(this); mLinearLayoutManager.setOrientation(OrientationHelper.VERTICAL); RecyclerAdapter mRecyclerAdapter = new RecyclerAdapter(this); mRecyclerView.setLayoutManager(mLinearLayoutManager); mRecyclerView.setAdapter(mRecyclerAdapter);
注:pageList.get(SPORT)為自己定義的一個執行個體化view,讀者可以根據自己需要定製不同的xml檔案並將其執行個體化為view