Android application development 第14章:Adapterパターンの復習とAndroidでの実装

🧩 Adapterパターンの復習(Java編)

■ Adapterパターンとは?

「既存のクラスのインターフェースを、別のインターフェースに変換する」デザインパターンです。
つまり、**互換性のないクラス同士をつなぐ“橋渡し”**をするのが目的です。


■ Javaでの例

// 既存のクラス(変更できない)
class OldPrinter {
    void printText(String text) {
        System.out.println("印刷: " + text);
    }
}

// 使いたいインターフェース
interface NewPrinter {
    void print(String message);
}

// Adapterクラス
class PrinterAdapter implements NewPrinter {
    private OldPrinter oldPrinter;

    public PrinterAdapter(OldPrinter oldPrinter) {
        this.oldPrinter = oldPrinter;
    }

    @Override
    public void print(String message) {
        oldPrinter.printText(message); // 互換性のある呼び出しに変換
    }
}

Adapterはあくまで“変換係”。使いたい形に「合わせる」ことで再利用性を高めます。


📱 Androidにおける Adapter の役割

Androidでは、ListViewRecyclerView にデータを表示する時に、必ず Adapter を使います。
なぜなら:

  • **データ(Listなど)**はプログラム上に存在する
  • **UI(View)**は画面に描画される

👉 その 「データ → UI」への橋渡しが、Androidにおける Adapter の役割です。


🎨 AndroidのAdapter 実装例(ListView

たとえば、以下のようなリストを表示したいとします:

List<String> items = Arrays.asList("りんご", "バナナ", "みかん");

■ ArrayAdapter を使う例

ListView listView = findViewById(R.id.listView);

ArrayAdapter<String> adapter = new ArrayAdapter<>(
    this,
    android.R.layout.simple_list_item_1,
    items
);

listView.setAdapter(adapter);
  • items: データのリスト
  • simple_list_item_1: 1行のレイアウト
  • ArrayAdapter: データを1行のテキストに変換する変換器(=Adapter)

ArrayAdapter は簡易版。複雑なデータ表示には RecyclerView.Adapter を使います。


🔁 RecyclerView.Adapter の実装(より現代的)

RecyclerView はより高速で柔軟なリスト表示コンポーネントで、Adapterの実装が必須です。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> dataList;

    public MyAdapter(List<String> list) {
        this.dataList = list;
    }

    // 1. 表示用のViewを生成
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                     .inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(view);
    }

    // 2. Viewにデータをバインド
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textView.setText(dataList.get(position));
    }

    // 3. アイテム数を返す
    @Override
    public int getItemCount() {
        return dataList.size();
    }

    // ViewHolderの定義
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView;
        public ViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(android.R.id.text1);
        }
    }
}

💡 Adapter実装のポイントまとめ

項目説明
Adapterデータと表示をつなぐ橋渡し
ViewHolder各行のViewの保持者(findViewByIdを毎回しないための最適化)
onCreateViewHolder()各アイテムのView生成
onBindViewHolder()各アイテムへのデータバインド
getItemCount()アイテム数の取得

🔚 まとめ

  • JavaのAdapterパターンと同様、Androidでも「形式の変換」と「仲介役」がキーワード。
  • AndroidのAdapterは、「データ(Listなど)」と「View(UI部品)」の接着剤のような役割を持つ。
  • ListView では ArrayAdapter を、より柔軟な RecyclerView では独自の Adapter を実装。

mh

Related Posts

Android application development 第33章:実践ミニアプリ:天気情報アプリ

Android application development 第32章:実践ミニアプリ:シンプルなToDoリスト

You Missed

Kubernetes Learning 第31章:コンテナのセキュリティ対策(PodSecurityなど)~Kubernetes環境を守るために最低限知っておきたいこと~

  • 投稿者 mh
  • 6月 4, 2025
  • 3 views

現場で使えるChrome DevTools実践ガイド 第10章:Device Modeでのレスポンシブ検証

  • 投稿者 mh
  • 6月 4, 2025
  • 3 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第4章:課金と料金モデル、予算とアラート:GCPの「お財布」管理術

  • 投稿者 mh
  • 6月 3, 2025
  • 11 views

Kubernetes Learning 第30章:NetworkPolicyの使い方 〜Pod間通信を制御するセキュリティの要〜

  • 投稿者 mh
  • 6月 3, 2025
  • 10 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第3章:IAM(Identity and Access Management):GCPの「誰が」「何に」「何ができるか」を管理する門番

  • 投稿者 mh
  • 6月 2, 2025
  • 17 views

現場で使えるChrome DevTools実践ガイド 第9章:Applicationパネルとストレージの確認

  • 投稿者 mh
  • 6月 2, 2025
  • 15 views