アダプターの基本説明


このセクションの概要

このセクションの最初から説明する UI コントロールはすべて、このアダプターを理解し、使用方法を学ぶことが重要です。 アダプターは、データの入力を支援するために使用される中間ブリッジです。簡単に言うと、さまざまなデータを適切な形式でビューに表示します。 ユーザーに見せてください!


1. MVC パターンの簡単な理解

アダプターの学習を始める前に、MVC パターンの概念を理解する必要があります。 例: 大規模な商用プログラムは通常、複数の人々によって開発されます。たとえば、誰かが操作インターフェイスの計画と設計を担当します。 誰かがプログラム コードを書く責任を負う場合、プログラム プロジェクトの作業を分割できるようにするには、プログラムの構造を適切に調整する必要があります。 インターフェイスの設計と変更の両方にプログラム コードの変更が含まれる場合、両者の分業により実装が困難になります。 優れたプログラム アーキテクトは、図に示すように、プログラム プロジェクト全体を 3 つの部分に分割します。

1.png

関係図分析:

  • モデル: 通常はデータとして理解でき、コアの実行を担当します。プログラムの動作判定ロジックによりビュー経由でユーザーを獲得 次に、入力データはデータベースから関連情報を照会され、最後に計算と判断が行われ、結果が表示のためにビューに与えられます
  • view: ユーザーの操作インターフェースは、端的に言えば GUI です。 、どのインターフェイスを使用するか コンポーネント、コンポーネント間の配置位置と順序を設計する必要があります
  • コントローラー: コントローラーは、モデルとビューの間のハブとして、プログラムとビューの実行フローを制御する責任があります。オブジェクト間の相互作用

そしてこのアダプターはコントローラーの中間部分です: Model(データ) ---> コントローラー(表示方法) ---> View(ユーザーインターフェース) ) これは単純な MVC コンポーネントを簡単に理解するためのものです。


2. アダプターの概念分析

公式ドキュメント: アダプター

まず、その継承構造図を見てみましょう:

2.png

上記はアダプターと継承構造図であり、次にアダプターの概要を紹介します。実際の開発で使用されているアダプターを入手してください。

  • BaseAdapter: 抽象クラス。実際の開発では、このクラスを継承し、関連するメソッドを書き換えます。これは最も使用されるアダプターです。
  • ArrayAdapter: 最も単純なアダプターは、1 行のテキストのみを表示できます~
  • SimpleAdapter: 優れた拡張性も備え、複数の効果をカスタマイズできるアダプターです。
  • SimpleCursorAdapter: 単純なテキスト型を表示するために使用される ListView はデータベースで一般的に使用されますが、少し古いです。 お勧めしません!

実際、BaseAdapter は 1 つあれば十分です。他のものについては、実際の開発ではあまり使用されません。後で説明します。コード例:


もっと話して、コードを書くだけです。 最も実際的なのは、次にいくつかの単純なアダプタ インスタンスを書くことです。 また、Adapter は ListView と組み合わせる必要があるため、Adapter がもたらす利便性についてもご理解ください。 GridView やその他のコントロールについて説明し、ListView ではさらに高度な使用法についても説明します。 さらに、ここで使用されるコントロールは次のセクションで説明する ListView です。 今は理解できなくても大丈夫!

1) ArrayAdapter の使用例:


レンダリングの実行:

3.png コードの実装:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle SavedInstanceState) {
{ God "," J God "
// arrayadapter を作成します
arrayadapter & lt; string & gt;adapter = new arrayadapter & lt; string & gt; Ple_expandable_list_item_1, Strs);
// The を呼び出して listview オブジェクトを取得しますsetAdapter メソッドは、ListView のアダプターを設定します。 list_test = (ListView) findViewById(R.id.list_test);
list_test.setAdapter(adapter);
}
}

関連するもの:

1. 配列を渡すことに加えて、配列リソース ファイルに書き込むこともできます:

例: resvalue の下に配列リソースの xml ファイルを作成します: arrays.xml

<?xml version="1.0"coding="utf-8"?>
<string-array name="myarray">
<item>/item> ;
これをレイアウトの listview 属性に設定します リスト項目:


<ListView
android:id="@id/list_test"
android:layout_height=" match_parent"
android:layout_width="match_parent"
android:entries = "@array/myarray"/>

以上です~

もちろん、Java コードでも次のように書くこともできます:


ArrayAdapter<CharSequence>adapter = ArrayAdapter.createFromResource(this,
選択 ) ;

も可能です!

2.
この ArrayAdapter はジェネリックスをサポートしているため、コレクションが必須であると冒頭で述べました。たとえば、次のように記述します。 ( "Basehen");

以上です~

3.ArrayAdapter をインスタンス化するときに 2 番目のパラメーターを見ました: android.R.layout.simple_expandable_list_item_1実際、これらはシステムによって提供されるいくつかの ListView テンプレートであり、次のものが含まれます:

simple_list_item_1 : 単一行のテキスト ボックス

4.png

simple_list_item_2 : 5.png

で構成される 2 つのテキスト ボックス simple_list_item_ selected : 各項目はチェックされたリスト項目で構成されます 6.png

simple_list_item_multiple_choice : すべてにチェックボックスがあります 7.png

simple_list_item_single_choice : すべてにラジオボタンがあります 8.png


2) 単純なアダプターの使用例:

シンプルなアダプター: 一見シンプルで強力ですが、もう少し書きます以下の複雑なリスト。 並べてみましょう!

レンダリングの実行:

9.png

コードの実装:

まず、リスト内の各項目のレイアウトを書き込みます:

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width ="match_parent"
android:layout_height="match_parent"
android:orientation="horizo​​ntal">

<!-- アバターを表示するための ImageView を定義します -->
<ImageView
android:id= " @+id/imgtou」

<!-- 定義 QQ のニックネームのテキスト ボックスを設定し、->
LinearLayout LinearLayout LinearLayout android:layout "> android:paddingLeft="8dp"
android:textColor=" #1D1D1C"
android:layout_height="wrap_content"
android:paddingLeft="8px"
            android:textColor="#B4B4B9"
android:textSize="14sp" />

</LinearLayout>

</LinearLayout>

次はMainActivity.java:

public class MainActivity extends AppCompatActivity {

private String[] names = new String[]{"B神", "吉神", "CaoShen"};
private String[ ]says = new String[]{「目に見えないハッキングが最も危険です」、「マスターはとても強力です〜」、「日本犬を導きます〜」};
private int[] imgIds = new int[]{R . mipmap.head_icon1, R.mipmap.head_icon2, R.mipmap.head_icon3};

@Override
protected void onCreate(Bundle SavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

List<Map<String, Object>> listitem = new ArrayList<Map<String, Object>>();
for (int i = 0; i < names.length; i++) {
,Object> showitem =新しいHashmap&lt; string、object&gt;(); "言う"}, new int[]{R.id.imgtou, R.id.name, R.id.says});
ListView listView = (ListView) findViewById(R.id. list_test);
listView.setAdapter (私のアダプター);
}
}

さて、上記は SimpleAdapter の簡単な使い方です。これはちょっと面白いですよ~10.jpg


3) SimpleCursorAdapter の使用例:

これは古いものですが、あまり上手ではない初心者にとってはまだ非常に便利ですSQLite で! 以前に ContentProivder によって書き込まれた連絡先を読み取る例を覚えていますか?以前は、ログを印刷することで実行されていました。 メソッドで表示するには、この SimpleCursorAdapter を通じて ListView に表示します。

実装レンダリング:

11.png

コード実装:

まずlistView:

list_item.xml:

<?xmlのレイアウトを書き留めます。 」 encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent "
android:orientation="horizo​​ntal">


<TextView
android:id="@+id/list_name"
android:layout_width="0dp"
android:layout_height="64dp "
android:layout_weight= 「1」 android:id= "@+id/list_phone"
android:layout_width="0dp" ="13798989898"
android: textColor="#EA5C4D"
android:textSize="18sp" />


</LinearLayout>

次に、 activity_main レイアウトは前と同じ単純な ListView で、次に

MainActivity.java:

Instance

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView list_test = (ListView) findViewById(R.id.list_test);
        //读取联系人
        Cursor cursor = getContentResolver()
                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        SimpleCursorAdapter spcAdapter = new SimpleCursorAdapter(this,R.layout.list_item,cursor,
                new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER},
                new int[]{R.id.list_name,R.id.list_phone});
        list_test.setAdapter(spcAdapter);
    }
}

インスタンスの実行»

[インスタンスの実行] ボタンをクリックして、オンライン インスタンスを表示します

最後に、AndroidManifest.xml に連絡先を読み取る権限を追加するだけです。

<uses-permission android:name="android.permission.READ_CONTACTS"/>

Q&A:

Q: それはそんなに簡単ですか?
——答え: はい、カーソルを直接取得してバインドするだけです。SQL ステートメントを自分で記述する必要はありません。
質問: これは時代遅れだと言いましたが、代わりに何を使えばいいですか?
——回答: 一般的なアプローチは、BaseAdapter を自分で書き直し、データ コレクションを取得して、それを対応するコントロールにバインドすることです。
質問: この SimpleCursorAdapter に関して他に注意すべき点はありますか?
——回答: はい、SimpleCursorAdapter を使用する場合、バインドされたデータベース テーブルには id フィールドが必要です。 または id; として、バインド中に取得されるデータにはこの id 項目が含まれている必要があります。そうでない場合は、次のエラーが報告されます。 java.lang.IllegalArgumentException: 列 'id' が存在しません ** :


さて、アダプターの基本的な説明は以上です。もちろん、ここで説明する 3 つのアダプターは、実際に開発しています。 基本的には使用しません(笑)。SimpleAdapter を時折使用する場合を除いて、通常は BaseAdapter を書き換えます。

その他、BaseAdapterについては説明したいことがたくさんあるので、ListViewに放り込んで一緒に話しましょう。 これは常に View に関連しており、ListView は私たちが最もよく使用するスペースです~ さて、このセクションはこれで終わりです、ありがとう~