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 第13章:Configuration Change(構成の変更)とは

Androidでは、アプリの動作中に**「画面の状態やデバイ…

Android application development 第12章:Activityのライフサイクルと onCreate / onStart / onResume の扱い方

■ ライフサイクルとは? Androidアプリでは、ユーザー…

You Missed

Kubernetes Learning 第10章:Namespace / Label / Annotation ~リソースを整理し、意味づける~

  • 投稿者 mh
  • 5月 14, 2025
  • 4 views

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

  • 投稿者 mh
  • 5月 14, 2025
  • 4 views

Kubernetes Learning 第9章:ConfigMap / Secret ~アプリの設定と機密情報の管理~

  • 投稿者 mh
  • 5月 13, 2025
  • 14 views

Android application development 第13章:Configuration Change(構成の変更)とは

  • 投稿者 mh
  • 5月 13, 2025
  • 13 views

Kubernetes Learning 第8章:ServiceとIngress ~クラスタ外との橋渡し~

  • 投稿者 mh
  • 5月 12, 2025
  • 19 views

Android application development 第12章:Activityのライフサイクルと onCreate / onStart / onResume の扱い方

  • 投稿者 mh
  • 5月 12, 2025
  • 21 views