Android RecyclerView使用紹介

7632 ワード

回転:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2004.html
RecyclerViewはAndroid Lバージョンに新しく追加されたListViewに代わるSDKであり、その柔軟性と代替性はlistviewに比べて優れている。次は一連の文章を通して、RecyclerViewの使い方を説明します。ListViewを徹底的に捨てます。紹介します。
RecyclerViewはListViewと同じ原理です。少量のViewだけを維持し、大量のデータセットを表示することができます。RecyclerViewは、データの展示と処理を以下の2つの方法で簡略化した。
  LayoutManager      item     。

                 。
また、あなた自身のLayoutManagerを定義し、削除動画を追加することもできます。RecyclerViewプロジェクトの構造は以下の通りです。
Adapter:  RecyclerView  ,        RecyclerView.Adapter    ,          item       。

LayoutManager:       item        ,       。       View   ,LayoutManager                  ,            View      findViewById  ( ListView    )。
現在のSDKでは、3つのオリジナルのラyoutManagerが提供されています。
LinearLayoutManager

GridLayoutManager

StaggeredGridLayoutManager
簡単なRecyclerViewの使い方
今回の例は一番簡単な使い方です。これからはもっと多くのRecyclerViewの他のいくつかのつまらない爆発の使い方を紹介します。作者が使う環境はAndroid Studio 0.8.6です。1、依存を追加する
ASのbuild.gradleに依存を追加し、同期して依存パケットを導入することができます。
[html]view plincopy
dependencies {  
...  
compile 'com.android.support:recyclerview-v7:21.0.+'  
}  
2、コードの作成
依存を追加してからコードを書き始めました。ListViewの使い方と似ています。xmlレイアウトファイルの中にRecyclerViewのレイアウトを作成します。
<RelativeLayout 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/my_recycler_view"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:scrollbars="vertical"/>  
</RelativeLayout>  
レイアウトを作成したらMainActivityでこのRecyclerViewを取得し、LayoutManagerとAdapterを宣言します。コードは以下の通りです。
[java]view plincopy
mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);  
//       LayoutManager  
mLayoutManager = new LinearLayoutManager(this);  
mRecyclerView.setLayoutManager(mLayoutManager);  
//        item       ,              
mRecyclerView.setHasFixedSize(true);  
//     Adapter  
mAdapter = newMyAdapter(getDummyDatas());  
mRecyclerView.setAdapter(mAdapter);  
次の問題はAdapterの作成です。
[java]view plincopy
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {  
    public String[] datas = null;  
    public MyAdapter(String[] datas) {  
        this.datas = datas;  
    }  
    //   View, LayoutManager     
    @Override  
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {  
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);  
        ViewHolder vh = new ViewHolder(view);  
        return vh;  
    }  
    //               
    @Override  
    public void onBindViewHolder(ViewHolder viewHolder, int position) {  
        viewHolder.mTextView.setText(datas[position]);  
    }  
    //         
    @Override  
    public int getItemCount() {  
        return datas.length;  
    }  
    //    ViewHolder,    Item          
    public static class ViewHolder extends RecyclerView.ViewHolder {  
        public TextView mTextView;  
        public ViewHolder(View view){  
        super(view);  
            mTextView = (TextView) view.findViewById(R.id.text);  
        }  
    }  
}  
3、運転
これらのコードの例を書いたら、もう走れます。例からもわかるように、RecyclerViewの使い方はListViewより複雑ではなく、むしろより柔軟で使いやすく、データ、配列、データの展示方法を分割してカスタマイズできるタイプで、カスタムの形も多く、非常に柔軟です。横のレイアウト
横にしたいListはLineear LayoutManagerを設置すればいいです。mLayoutManagerのタイプはLinear LayoutManagerで、父ではなくLiner LayoutManagerです。java view plincopy。
mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);  
Gridレイアウト
Gridレイアウトのリストがほしいなら、LayoutManagerがGride LayoutManagerであると宣言すればいいです。
mLayoutManager = new GridLayoutManager(context,columNum);  
mRecyclerView.setLayoutManager(mLayoutManager);  
なお、Gridレイアウトでは、リストのOrientation属性を設定して、横方向と縦方向のGridレイアウトを実現してもよい。滝の流れ模様
滝の流れはStaggreed LayoutManagerを使いましょう。具体的な方法は上記と似ていますので、紹介しません。
RecyclerViewの高級な方法
RecyclerViewを使用していると、各クリックイベントにListViewほど楽ではないことが分かりました。ListViewのように直接OnItemClickListenerを追加すればいいです。実は私達はRecyclerViewをListViewのアップグレード版として使わないでください。彼を容器として見てほしいです。同時に多くのItemが含まれています。それらは違った方法で組み合わせを並べてもいいです。とても柔軟です。クリック方法は自分の意思で実現できます。
このセクションでは、RecyclerViewにクリックイベントを追加する方法を説明し、Itemの削除方法を簡単に紹介します。クリックイベントを追加
前回はRecyclerViewのAdpaterをどのように使うかを話しましたが、Adapterはクリックイベントを追加するのにいいところです。中は構造レイアウトなどのViewの主要な場所であり、データとレイアウトを結合するところです。まず私達はAdapterの中でクリックを実現するインターフェースを作ります。viewはItemをクリックします。dataは私達のデータです。私達は私がクリックしたエリアの部分のデータが何なのかを知りたいので、次のステップで操作します。
public static interface OnRecyclerViewItemClickListener {  
    void onItemClick(View view , DataModel data);  
}  
インターフェースを定義して、インターフェースを追加して、Adapterインターフェースを設定する方法:
[java]view plincopy
private OnRecyclerViewItemClickListener mOnItemClickListener = null;  
    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {  
    this.mOnItemClickListener = listener;  
}  
このインターフェースはどこに使いますか?下記のコードに示すように、私達はAdapterのためにOClikListener方法を実現します。
[java]view plincopy
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener{  
    @Override  
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, final int i) {  
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);  
        ViewHolder vh = new ViewHolder(view);  
        //    View        
        view.setOnClickListener(this);  
        return vh;  
    }  
    @Override  
    public void onBindViewHolder(ViewHolder viewHolder, final int i) {  
        viewHolder.mTextView.setText(datas.get(i).title);  
        //      itemView Tag ,           
        viewHolder.itemView.setTag(datas.get(i));  
    }  
    ...  
    @Override  
    public void onClick(View v) {  
        if (mOnItemClickListener != null) {  
            //      getTag        
            mOnItemClickListener.onItemClick(v,(DataModel)v.getTag());  
        }  
    }  
    ...  
}  
これらの仕事を終えたら、Activityまたは他のところでRecyclerViewにプロジェクトを追加してイベントをクリックできます。MainActivityで:
[java]view plincopy
mAdapter = new MyAdapter(getDummyDatas());  
mRecyclerView.setAdapter(mAdapter);  
mAdapter.setOnItemClickListener(new MyAdapter.OnRecyclerViewItemClickListener() {  
    @Override  
    public void onItemClick(View view, DataModel data) {  
        //DO your fucking bussiness here!  
    }  
});  
上記のコードを完成したらRecyclerViewにプロジェクトを追加してクリックします。次にRecyclerViewがどのようにデータを追加して削除して画面に表示するかを確認します。削除データを追加
以前はListViewの中で、データを修正したらAdapterのnotifyDataset Changeを使って画面を更新することができます。しかし、RecyclerViewにはもっと高級な使い方があります。
追加データ:[java]view plincopy
public void addItem(DataModel content, int position) {  
    datas.add(position, content);  
    notifyItemInserted(position); //Attention!  
}  
データを削除:
[java]view plincopy
public void removeItem(DataModel model) {  
    int position = datas.indexOf(model);  
    datas.remove(position);  
    notifyItemRemoved(position);//Attention!  
}  
なお、RecyclerViewの追加削除はすべてデフォルトのアニメーション効果があり、効果がなければ下記のコードを追加できます。
[java]view plincopy
mRecyclerView.setItemAnimator(newDefaultItemAnimator());  
もちろんです。ご自分でアニメイトを定義してもいいです。