Android 新控制項RecyclerView

來源:互聯網
上載者:User

標籤:android   recyclervi   新特性   

RecyclerView 是 android-support-v7-21 版本中新增的一個 Widgets。我們可以使用RecyclerView非常簡單的實現橫向豎向的ListView.GridView.以及瀑布流的效果.先看一下項目的實現的效果

是不是很炫?使用RecyclerView可以非常簡單的實現.

RecyclerView 特性
1.不關心Item是否顯示在正確的位置以及如何顯示
2.不關心item之間如何分割
3.不關注Item增加與刪除的動畫效果
4.它僅僅只是關注如何回收和複用item
貼出部分代碼:

     mRecyclerView = (RecyclerView) findViewById(R.id.rv);        //設定它的Adapter        myRecyclerViewListAdapater = new MyRecyclerViewListAdapater(this,sourceDatas);        mRecyclerView.setAdapter(myRecyclerViewListAdapater);        //設定它的LayoutManage , 通過 LayoutManager去設定它的顯示方式        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);        mRecyclerView.setLayoutManager(linearLayoutManager);        //設定分割線//        dividerItemDecoration = new DividerItemDecoration(this,LinearLayoutManager.VERTICAL);//        mRecyclerView.addItemDecoration(dividerItemDecoration);        //設定增加刪除Item的動畫        mRecyclerView.setItemAnimator(new DefaultItemAnimator());        myRecyclerViewListAdapater.setOnItemClickListener(new MyRecyclerViewListAdapater.OnItemClickListener() {            @Override            public void onItemClickListener(View view, int position) {                Toast.makeText(MainActivity.this,"click : " + position,Toast.LENGTH_SHORT).show();            }            @Override            public boolean onLongItemClickListener(View view, int position) {                myRecyclerViewListAdapater.deleteItem(position);                return false;            }        });

Adapter代碼

public class MyRecyclerViewListAdapater extends RecyclerView.Adapter<MyRecyclerViewListAdapater.MyListHolder> {    private Context context;    protected List<String> sourceDatas;    private LayoutInflater layoutInflater;    public OnItemClickListener mOnItemClickListener;    public MyRecyclerViewListAdapater(Context context,List<String> sourceDatas){        this.context = context;        this.sourceDatas = sourceDatas;        layoutInflater = LayoutInflater.from(context);    }    @Override    public MyRecyclerViewListAdapater.MyListHolder onCreateViewHolder(ViewGroup viewGroup, int i) {        View view = layoutInflater.inflate(R.layout.item,viewGroup,false);        MyListHolder myListHolder = new MyListHolder(view);        return myListHolder;    }    @Override    public void onBindViewHolder(final MyListHolder viewHolder, final int i) {        viewHolder.textView.setText(sourceDatas.get(i));        itemClick(viewHolder);    }    /**     * ItemView點擊事件     */    protected void itemClick(final MyListHolder viewHolder){        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if(null != mOnItemClickListener){                    int postion = viewHolder.getLayoutPosition();                    mOnItemClickListener.onItemClickListener(viewHolder.itemView,postion);                }            }        });        viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                if(null != mOnItemClickListener){                    int position = viewHolder.getLayoutPosition();                    return mOnItemClickListener.onLongItemClickListener(viewHolder.itemView,position);                }                return false;            }        });    }    /**     * 方法返回item的數量     * */    @Override    public int getItemCount() {        return sourceDatas.size();    }    /**     * 添加item     */    public void addItem(int position){        sourceDatas.add(position,"Add Item");        notifyItemInserted(position);    }    /**     * 刪除Item     */    public void deleteItem(int positon){        sourceDatas.remove(positon);        notifyItemRemoved(positon);    }    /**     * 設定item點擊介面     */    public void setOnItemClickListener(OnItemClickListener onItemClickListener){        this.mOnItemClickListener = onItemClickListener;    }    /**     * Recycler本身並沒有給我們提供ItemClick事件,這裡需要我們自己實現這個介面     * 點擊介面     * */    public interface OnItemClickListener{        //點擊事件        public void onItemClickListener(View view,int position);        //長按事件        public boolean onLongItemClickListener(View view,int position);    }    class MyListHolder extends RecyclerView.ViewHolder{        TextView textView;        //繼承 RecyclerView.ViewHolder 必須要實現它的構造方法        //可以看到在它的構造方法接收到一個View的參數,這個View就是我們建立的ItemView        public MyListHolder(View itemView) {            super(itemView);            textView = (TextView) itemView.findViewById(R.id.tv_list_item);        }    }}

布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/rv"        android:layout_width="match_parent"        android:layout_height="match_parent" /></FrameLayout>

源碼地址:http://download.csdn.net/detail/u011068996/8858869

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

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.