組件RecyclerView的應用(一),組件recyclerview

來源:互聯網
上載者:User

組件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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.