第02話集合クラスとリストクラスコントロール

7323 ワード

しゅうごう
配列があるのになぜ集合するのか:
  • 配列は固定長であり、集合長は可変(従って、シーンに応じて異なる)
  • である.
  • は、一対一の関係のデータ
  • を同時に記憶する.
  • 便利増删改查
  • setなどの重複データを追加できない
  • Collection
    Map
     
     
    インタフェース
    HashMap
    List
    Queue
    Set
    ArrayList
    LinkedList
    HashSet
     
     
     
     
    クラス#クラス#
     
     
     
     
    Collectionはクラスのオブジェクトを格納し、Mapはキー値のペアを格納します.
    ListとQueueが格納するオブジェクトは秩序化されており、重複を許可しnullとすることができる.Setに格納されているオブジェクトは無秩序であり,重複は許されずnullは1つしか存在しない.

    ArrayList


    l ArrayList下位層は配列によって実現される
    l動的成長可能
    lリストの末尾に要素を追加または削除するのは効率的です(要素を挿入または削除するには後ろの要素を移動する必要があります)
    l要素の検索または更新に適している
    l要素はNULLであってもよい
     
    add()挿入要素
    size()表示要素の個数、出力要素の遍歴
    remove()除去要素(remove(「dd」)は1つだけ除去されます)
    すべてを削除するにはremoveAll(Collection)を使用します.

    HashSet


    l Setは要素が無秩序であり、繰り返してはならない集合であり、集合と呼ばれる.
    l HashSetはSetの重要な実装クラスである
    l HashSetはNull値が1つしか許可されていません
    l良好なアクセスと検索性能を有する
     
    Iterator(反復器)
    Iteratorインタフェースは、様々な集合要素を統一的に巡回することができます.
    hasNext()メソッドは、セットに次の要素があるかどうかを検出します.
    next()は、セット内の次の要素を返します.
     
    集合の要素がカスタムオブジェクトである場合、hashCodeメソッドとequalsメソッドを書き換える必要があります.catクラスを参照してください.

    HashMap


    Mapのデータはキー値(key-value)として格納される
    Key-valueはEntryタイプのオブジェクトインスタンスで存在します
    key値でvalueをすばやく検索できます
    1つのマッピングに重複するキーを含めることはできません
    キーごとに最大1つの値にマップ
     
    HashMapハッシュテーブルに基づくMapインタフェースの実装;
    null値とnullキーの使用を許可します.
    key値は重複を許さない.
    HashMapのEntryオブジェクトは無秩序に配列されています.
    HashMapのkeyは基本データ型ではありません
     
    put()挿入キー値ペア
    values()取得値のセット
    keySet()取得キーのセット
    EntrySet()キー値ペアセットの取得(Entryコレクション)
    get(key)取得キーに対応する値
    containsKey()は、そのkeyが含まれているか否かを判断する
    リストクラスコントロール

    AdapterView


     
     
    l AdapterViewはView Groupから継承され、本質はコンテナである.
    l AdapterViewは複数の「リスト項目」を含むことができる
    l AdapterViewに含まれる「リスト項目」はAdapterが提供する.AdapterViewのsetAdapter(Adapter)メソッドを呼び出せばよい.
     

    Adapter


     
  • BaseAdapter:抽象クラス、実際の開発ではこのクラスを継承し、関連メソッドを書き換え、最も多くのAdapterを使用します!
  • ArrayAdapter:汎用操作をサポートし、最も簡単なAdapterは、1行の文字しか表示できません.
  • SimpleAdapter:同じく良好な拡張性を持つAdapterで、多種の効果をカスタマイズすることができます!

  •  

    ListView


    l簡単なArrayAdapterがListViewを埋め込む例. BasicListViewActivity
    l SimpleAdapterがListViewを埋め込む例(独学)
    l BaseAdapterがListViewを埋め込む例(独学)
    l ListViewインタフェースのカスタマイズ例
     :  @android.support.annotation.NonNull  @androidx.annotation.Nullable

    l ListViewの最適化
    tagsについて:https://developer.android.google.cn/reference/android/view/View#tags
    l ListViewのクリックイベント
    setOnItemClickListenerイベント
    setOnItemLongClickListenerイベント長押しイベント.return false; Clickイベントは引き続き発生します.
     

    RecyclerView


    RecyclerViewはListViewよりも強力で柔軟です.

    1.サポートライブラリの追加(support library)


    在build.gradleファイルに次のコードを追加します.
    dependencies {
          implementation 'com.android.support:recyclerview-v7:28.0.0'
    }
    そしてSync

    2.レイアウトファイルへのRecyclerViewの追加


    3.RecyclerViewのLayoutManagerとAdapterの設定


    //RecyclerViewコントロールの取得
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    //レイアウトマネージャの設定
        RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
    //Adapterの設定
        RecyclerView.Adapter mAdapter = new MyAdapter(myDataset);
        recyclerView.setAdapter(mAdapter);
    レイアウトマネージャは、RecyclerViewのItemの表示方法を決定し、非表示のItemをいつ多重化するかを決定し、重複作成を回避し、高コストのfindViewById()メソッドを実行するために使用します.
    Adapterはデータを提供するために使用されます.

    4.カスタムアダプタ


    RecyclerViewを使用する場合は、アダプタAdapterとレイアウトマネージャLayoutManagerを指定する必要があります.アダプタはRecyclerViewを継承する.Adapterクラス、Adapterで書き換える方法:
       onCreateViewHolder(ViewGroup parent, int viewType) 

    onBindViewHolder(MyViewHolder holder, int position)
    典型的なAdapter:
    public class MyAdapter extends RecyclerView.Adapter {
        private String[] mDataset;
      
    //ViewHolderは、各itemアイテムのすべてのviewコントロールを保存します.
        public static class MyViewHolder extends RecyclerView.ViewHolder {
            public TextView textView;
            public MyViewHolder(TextView v) {
                super(v);
                textView = v;
            }
        }
    //コンストラクション関数(パラメータタイプは使用するデータセットタイプに依存)
        public MyAdapter(String[] myDataset) {
            mDataset = myDataset;
        }
       //Create new views (invoked by the layout manager)
        @Override
        public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                       int viewType) {
    //由item_layoutレイアウト新しいViewを作成
    //LayoutInflaterはレイアウトフィラー
            TextView v =(TextView)LayoutInflater.from(parent.getContext())
                    .inflate(R.layout. item_layout, parent, false);
            MyViewHolder vh = new MyViewHolder(v);
            return vh;
        }
     
        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
    //現在位置のデータをViewに埋め込むコントロール
            holder.textView.setText(mDataset[position]);
        }
     
        @Override
        public int getItemCount() {
            return mDataset.length;
        }
    }

    5.RecyclerView追加イベント処理


    各itemのViewオブジェクトに対して、onBindViewHolderメソッドまたはonCreateViewHolderメソッドでリスニングイベントを設定します.Listenerはitem全体に対して設定することも、ビューに対して個別に設定することもできます.
    itemViewはRecyclerViewです.ViewHolderのメンバー変数は、itemに対応するViewオブジェクト全体を保存します.
    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    Toast.makeText(viewHolder.itemView.getContext(),"onClick "+ fruit.getName(), Toast.LENGTH_LONG).show();
                }
            });
    viewHolder.fruitImage. setOnClickListener(new View.OnClickListener() {…………

    6.RecyclerViewのカスタマイズ


    一般的には、RecyclerViewの4つの設定が必要です.
    ²Layout Manager(必須)Itemのレイアウト
    ²Adapter(必須)はItemにデータを提供する
    ²Item Decoration(オプション、デフォルトは空)Item間のDivider
    ²Itemアニメーションの追加、削除
    6.1レイアウトの変更
    ²LinearLayoutManagerは、ListViewのような効果を持つItem(1次元リスト)を垂直または水平にリストします.
    ²GridLayoutManagerは、GridViewのような効果を持つItem(2 Dテーブル)をグリッドで表示します.
    ²StaggerdGridLayoutManagerはItemを滝の流れで展示しています(2 Dテーブルでもあります)
    1) LinearLayoutManager
    LinearLayoutManager layoutManager=new LinearLayoutManager(this);
    layoutManager.setOrientation(LinearLayout.HORIZONTAL);//横レイアウトの設定
    2) GridLayoutManager
    GridLayoutManager layoutManager=new GridLayoutManager(this,2);
    また、GridLayoutManagerのsetSpanSizeLookupメソッドでは、行ごとに表示される列数を設定できます.
    公式サイト:https://developer.android.google.cn/reference/kotlin/androidx/recyclerview/widget/GridLayoutManager?hl=en#top_of_page
    3) StaggeredGridLayoutManager
    StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    6.2 itemの追加と削除を設定するアニメーション
    fruitsRecyclerView.setItemAnimator(new DefaultItemAnimator());
    DefaultItemAnimatorはデフォルトのItemAnimator実装クラスであり、そのまま使用すればよいのがデフォルトの設定です.
     
    RecyclerView公式サイトのドキュメント:https://developer.android.google.cn/guide/topics/ui/layout/recyclerview#structure
    RecyclerViewの詳細:
    https://www.jianshu.com/p/4f9591291365