第02話集合クラスとリストクラスコントロール
7323 ワード
しゅうごう
配列があるのになぜ集合するのか:配列は固定長であり、集合長は可変(従って、シーンに応じて異なる) である.は、一対一の関係のデータ を同時に記憶する.便利増删改查 setなどの重複データを追加できない Collection
Map
インタフェース
HashMap
List
Queue
Set
ArrayList
LinkedList
HashSet
クラス#クラス#
Collectionはクラスのオブジェクトを格納し、Mapはキー値のペアを格納します.
ListとQueueが格納するオブジェクトは秩序化されており、重複を許可しnullとすることができる.Setに格納されているオブジェクトは無秩序であり,重複は許されずnullは1つしか存在しない.
ArrayList
BaseAdapter:抽象クラス、実際の開発ではこのクラスを継承し、関連メソッドを書き換え、最も多くのAdapterを使用します! ArrayAdapter:汎用操作をサポートし、最も簡単なAdapterは、1行の文字しか表示できません. SimpleAdapter:同じく良好な拡張性を持つAdapterで、多種の効果をカスタマイズすることができます!
ListView
配列があるのになぜ集合するのか:
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
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
l AdapterViewはView Groupから継承され、本質はコンテナである.
l AdapterViewは複数の「リスト項目」を含むことができる
l AdapterViewに含まれる「リスト項目」はAdapterが提供する.AdapterViewのsetAdapter(Adapter)メソッドを呼び出せばよい.
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
: @android.support.annotation.NonNull @androidx.annotation.Nullable
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