RecyclerViewに精通しています.ListView、GridView、滝の流れを作ります.分割線を追加し、動画を削除し、Itemクリックイベントを追加します.


転載は出典を明記してください.http://blog.csdn.net/linglongxin24/article/details/53126706 この記事は「DylanAndroidのブログ」から来ています.
RecyclerViewに精通しています.ListView、GridView、滝の流れを作ります.分割線を追加し、動画を削除し、Itemクリックイベントを追加します.
前のAndroidでRecyclerViewのトレーナーの真似美団の分類インターフェイスでRecyclerViewの基本的な使い方を書きました.今日はここでRecyclerViewの完全な使い方をもう一度勉強したいです.普通のListViewと横のListViewをどうやって作るか、普通のGridViewと横のGridView、どうやって分割線を追加するか、そして追加と削除の動画、そしてItemのOnClickイベントのモニターを設定するかを含む.ここにはいろいろな使い方が含まれています.入門の使い方として、すでにマスターしている方はご遠慮ください.
まず全体の効果図を見ます.
一.RecyclerViewの紹介
RecyclerViewはAndroid Lバージョンに新しく追加されたListViewおよびGridViewに代わるSDKであり、その柔軟性はListViewよりも優れています.次に一連の内容を通して、RecyclerViewの使い方を説明します.ListViewとGridViewを徹底的に捨てます.
二.RecyclerViewアーキテクチャ
三.RecyclerViewのメリット
  • 1.RecyclerViewはView Holderの回収多重をパッケージ化しています.つまりRecyclerViewは標準化されています.AdapterはView Holderに向かっています.多重化されたロジックはパッケージ化されています.書くのがもっと簡単です.
  • .挿抜式の体験を提供しています.高さの結合、非常に柔軟で、Itemの表示RecyclerViewに対して、専用に該当するクラスを抽出して、Itemの表示を制御して、その拡張性を非常に強くします.例えば、横方向や縦方向のスライドリストの効果をコントロールしたいなら、Linear LayoutManagerなどで制御できます.すなわち、RecyclerViewはListViewのラインにこだわらず、滝の流れに対応したStage GredGrade LayoutManagerなどがあります.Itemの分離線を制御したいのですが、RecyclerViewのItem Decorationという種類を継承して、自分の業務ニーズに対してコードを書き表してもいいです.
  • .Itemの添削をコントロールできるアニメーションは、Item Animtorというカテゴリーによってコントロールできます.もちろん、添削された動画に対しては、RecyclerViewは自分のデフォルトがあります.
  • 四.RecyclerView 3部作実現
  • 第一歩:レイアウトマネージャを設定して、各アイテムがどのように配置されているかを判定するために使用する.
  • Liear LayoutManagerはListViewの効果
  • に相当します.
  • GridLayoutManagerはGridViewに相当する効果
  • です.
  • Stagg eredGredLayoutManagerの滝の流れ
  • 第二ステップ:分割線を追加し、インターネット上に流れる万能分割線Divider Item DecorationとDivider GridItem Decorationを使用して、まずstyle.xmlに分割線画像を定義します.1.まずdrawableにdivider.xml
  • を新規作成します.
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
        <solid android:color="@color/colorAccent"/>
        <size android:height="1dp" android:width="1dp"/>
    </shape>
        2.   style.xml   android:listDivider
    
            <item name="android:listDivider">@drawable/divider</item>
  • 第3ステップ:アダプタを設定する
  • package cn.bluemobi.dylan.recyclerviewdemo2;
    
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /** * RecyclerView     * Created by yuandl on 2016-11-01. */
    
    public class RvAdapter extends RecyclerView.Adapter<RvAdapter.MyViewHolder> {
        private Context context;
        private List<Integer> datas;
    
        /** * item             */
        private OnItemClickListener onItemClickListener;
        /** *      item     */
        private List<Integer> heights = new ArrayList<>();
    
        /** *        item      * * @param type */
    
        private int type = 0;
    
        public RvAdapter(Context context, List<Integer> datas) {
            this.context = context;
            this.datas = datas;
            for (int i : datas) {
                int height = (int) (Math.random() * 100 + 300);
                heights.add(height);
            }
        }
    
        public void setType(int type) {
            this.type = type;
        }
    
        /** *        * * @param onItemClickListener */
        public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
            this.onItemClickListener = onItemClickListener;
        }
    
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View contentView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
            MyViewHolder viewHolder = new MyViewHolder(contentView);
            return viewHolder;
        }
    
        @Override
        public void onBindViewHolder(MyViewHolder holder, final int position) {
            RecyclerView.LayoutParams layoutParams;
            if (type == 0) {
                layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            } else if (type == 1) {
                layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            } else {
                layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, heights.get(position));
                layoutParams.setMargins(2, 2, 2, 2);
            }
            holder.itemView.setLayoutParams(layoutParams);
            holder.imageView.setImageResource(datas.get(position));
            holder.tv.setText("  " + position);
            /**  item    **/
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClickListener(position, datas.get(position));
                    }
                }
            });
    
        }
    
        @Override
        public int getItemCount() {
            return datas == null ? 0 : datas.size();
        }
    
        /** *      ViewHolder */
        public class MyViewHolder extends RecyclerView.ViewHolder {
            private ImageView imageView;
            public TextView tv;
    
            public MyViewHolder(View itemView) {
                super(itemView);
                imageView = (ImageView) itemView.findViewById(R.id.iv);
                tv = (TextView) itemView.findViewById(R.id.tv);
            }
        }
    
        /** *   item      */
        public interface OnItemClickListener {
            void onItemClickListener(int position, Integer data);
    
        }
    }
    
    五.さまざまな効果を作り出す
  • 1.縦向きのListView
  •     rv.setBackgroundColor(Color.TRANSPARENT);
        rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        rvAdapter.setType(0);
        rv.removeItemDecoration(itemDecoration);
        rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
        itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST);
        rv.addItemDecoration(itemDecoration);
  • .横向きのListView
  •    rvAdapter.setType(1);
       rv.removeItemDecoration(itemDecoration);
       rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
       rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
       itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL_LIST);
       rv.addItemDecoration(itemDecoration);
  • .たてのGridView
  •    rvAdapter.setType(1);
       rv.setBackgroundColor(Color.TRANSPARENT);
       rv.removeItemDecoration(itemDecoration);
       rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
       rv.setLayoutManager(new GridLayoutManager(this, 5));
       itemDecoration = new DividerGridItemDecoration(this);
       rv.addItemDecoration(itemDecoration);
  • .横のGridView
  •     rvAdapter.setType(1);
        rv.setBackgroundColor(Color.TRANSPARENT);
        rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
        rv.removeItemDecoration(itemDecoration);
        rv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL));
        itemDecoration = new DividerGridItemDecoration(this);
        rv.addItemDecoration(itemDecoration);
  • .垂直な滝の流れ
         rvAdapter.setType(3);
         rv.setBackgroundColor(getResources().getColor(R.color.colorAccent));
         rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
         rv.removeItemDecoration(itemDecoration);
         rv.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.VERTICAL));
  • .アニメーションの追加と削除
           /**      **/
           rvAdapter.notifyItemInserted(1);
           /**      **/
           rvAdapter.notifyItemRemoved(1);
    六.GiHub