android之recyclerview的基本使用

來源:互聯網
上載者:User

標籤:recyclerview   recyclerview的使用   

Google在推出Android5.0的時候推出了MaterialDesign ,二 RecyclerView是MaterialDesign 重要組件之一。當然還有CardView/Palette.

RecyclerView是用來替換傳統的ListView和GridView,瀑布流效果的。是的RecyclerView這一個控制項,可以實現這三個效果。雖然在開始使用recyclerview的時候會感到有些男,但是用熟練了會發現recyclerview十分強大。它可以給每一item裡面的控制項設定點擊時間,而不需要擔心事件衝突的問題,如果是使用listview或者是gridview就必須要解決事件衝突,甚至listview或gridview的item只能設定一個點擊事件,否則就會造成事件衝突,而這些衝突並不好解決。所以recyclerview來了。

首先在項目中整合RecyclerView,在build.gradle添加RecyclerView的依賴

compile ‘com.android.support:recyclerview-v7:23.2.1‘
這樣項目中就整合 recyclerview了,Android Studio 會自動連網下載 recyclerview包。

在activity_main.xml中,使用recyclerview.

<android.support.v7.widget.RecyclerView    android:id="@+id/recyclerView"    android:layout_width="match_parent"    android:layout_height="match_parent" />

布局中已經有了recyclerview的控制項,下面就開始在代碼中編寫。

    在這裡解釋一下recyclerview的使用。就像listview那樣,recyclerview也需要一個適配器;在我們最佳化listview的時候,我們經常會使用到一個內部類ViewHolder來儲存item中的控制項,以便於item的複用。而現在recyclerview則必須使用ViewHolder。這個ViewHolder必須繼承RecyclerView.ViewHolder,RecyclerView.ViewHolder有一個參數的構造方法,傳入的是一個view,這個view 就是recyclerview的item。

RecyclerViewHolder:

public class RecyclerViewHolder extends RecyclerView.ViewHolder {    public TextView textView;    public ImageView imageView;    public RecyclerViewHolder(View itemView) {        super(itemView);        textView = (TextView) itemView.findViewById(R.id.textView);        imageView = (ImageView) itemView.findViewById(R.id.imageView);    }}

RecyclerViewHolder寫好之後就開始寫Adapter.同樣RecyclerAdapter需要繼承RecyclerView.Adapter<RecyclerViewHolder>,泛型ViewHolder就是自己自訂的RecyclerViewHolder。Adapter的寫法如下:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {    private List<Map<String, String>> dataList;    public RecyclerAdapter() {        dataList = new ArrayList<>();    }    public void addAll(List<Map<String, String>> data){        dataList.addAll(data);    }    /**     *     * @param viewType 對應的是getItemViewType(int position)方法返回的數值     */    @Override    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);        return new RecyclerViewHolder(view);    }    /**     *     * @param holder 對應的是onCreateViewHolder方法,返回的RecyclerViewHolder     * @param position 當前的item的位置     */    @Override    public void onBindViewHolder(RecyclerViewHolder holder, int position) {        holder.textView.setText(dataList.get(position).get("data"));    }    @Override    public int getItemCount() {        return dataList.size();    }}

MainActivity中的代碼。

public class MainActivity extends AppCompatActivity {    private RecyclerView recyclerView;    //使用線性布局管理器,設定的方向orientation是預設,即垂直方向    private LinearLayoutManager manager;    //適配器    private RecyclerAdapter adapter;    //資料來源    private List<Map<String, String>> list;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);        manager = new LinearLayoutManager(this);        adapter = new RecyclerAdapter();        //設定布局管理器        recyclerView.setLayoutManager(manager);        //給recyclerview設定適配器        recyclerView.setAdapter(adapter);        list = new ArrayList<>();        for (int i=0;i<50;i++)        {            Map<String,String> map = new HashMap<>();            map.put("data", "item-->   "+i);            list.add(map);        }        adapter.addAll(list);        adapter.notifyDataSetChanged();    }}

recyclerview實現listview的效果就完成了,運行效果:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/7D/CB/wKiom1bwAm6gFtn-AACorefEJoQ425.png" title="recyclerview實現listview的效果" alt="wKiom1bwAm6gFtn-AACorefEJoQ425.png" />

如果是想每個item橫向滑動的話,只需要使用LinearLayoutManager的三個參數的構造方法就行了,new LInearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true)就可以實現橫向滑動的效果了。

    recyclerView實現GridView的效果。需要是用是GridLayoutManager。將recyclerView的布局管理器更換成GridLayoutManager manager = new GridLayoutManager(this, 2),如下:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/7D/CB/wKiom1bwBiXzf2LxAADEl4akjZo408.png" title="recyclerView實現GridView效果" alt="wKiom1bwBiXzf2LxAADEl4akjZo408.png" />

recyclerview實現瀑布流的效果另起一片文章講解。

本文出自 “墨宇遲傷” 部落格,請務必保留此出處http://zzhhz.blog.51cto.com/7107920/1753676

android之recyclerview的基本使用

聯繫我們

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