AndroidにおけるFragment機能の応用

前回のおさらいと今回のテーマ前回の記事「Androidアプリのイベント処理とFragment」では、Androidアプリのイベント処理の基本とFragment機能の概要・サンプルアプリを作成しました。AndroidにFragment機能が追加された背景が理解いただけたかと思います。今回は、前回作成

石立 宏志

2012年1月18日 20:00

前回のおさらいと今回のテーマ

前回の記事「Androidアプリのイベント処理とFragment」では、Androidアプリのイベント処理の基本とFragment機能の概要・サンプルアプリを作成しました。AndroidにFragment機能が追加された背景が理解いただけたかと思います。

今回は、前回作成したサンプルアプリをもとにFragment機能について掘り下げます。

実際のアプリでFragment機能をどのように利用するかを説明し、Fragmentに振る舞いを持たせる方法を説明します。

サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。

Fragmentに振る舞いを持たせる

前回作成したサンプルアプリを使ってみると気になる点がいくつかあると思います。例えば、

  • 左側のリストをタップしても、「読み込み中」などの表示が出ないため、反応したかどうかがわかりづらい
  • Webページでリンクをクリックしたら、ブラウザが起動される
  • 戻るキーを押したら、前に表示していたWebページに戻ると思っていたのにアプリが閉じてしまう

などなど、実際に使ってみるといろいろと気になります。

今回は上記の気になる点を修正するため、前回作成したサンプルアプリを修正します。

修正する前に…

上記の気になる点を修正するためには、2つの方向性があります。

  • 画面の左側・右側を構成するFragmentを修正し、上記の振る舞いをFragmentに持たせる
  • Activityを修正し、上記の振る舞いを持たせる

いまのサンプルアプリはActivityに全ての振る舞いを記述しています。実際のソースコードを見てわかる通り、Webページを表示する処理はActivity内に記述されており、画面左側のURL一覧をタップした際のイベントハンドラ内に画面右側のWebページを表示する処理が記述されています。

そのため、画面を構成する2つのFragmentが強く結びついてしまい、もしスマートフォン用に画面を分けることになった場合の対応が困難です。2つのFragmentの間でやりとりしなければいけないデータはURLだけですので、今回はFragmentを修正して対応し、ActivityはFragment間のデータ受け渡しを行う形に修正します。

Fragmentの修正

振る舞いを記述する前にまずはFragmentを修正し、Fragment間の結びつきを弱くしましょう。修正する点は以下の通りです。

  • 画面左側のリストはActivityから表示する一覧のデータをもらい、タップされたURLを通知する
  • 画面右側のWebページ表示はActivityから渡されたURLを表示する

Webページ表示用Fragmentの修正

まずは画面右側のWebページ表示用のFragmentを修正しましょう。ActivityからURLを渡せるように MyWebViewFragment.java に以下のメソッドを追加します。

  public void loadUrl(final String url) {
    getWebView().loadUrl(url);
  }

メソッドを追加したら、それに合わせて HelloFragmentActivity.java も以下のように修正します。

修正前:

  // 画面左側のリスト項目をタップしたときのイベント処理
  listFragment.getListView().setOnItemClickListener(
    new ListView.OnItemClickListener() {
      public void onItemClick(AdapterView<?> listView, View v,
          int pos,
          long id) {
        // タップした位置のURLを取得し、画面右側に表示させる
        Map<String, String> m = (Map<String, String>) adapter
          .getItem(pos);
        wvf.getWebView().loadUrl(m.get("url"));
      }
    });

修正後:

  // 画面左側のリスト項目をタップしたときのイベント処理
  listFragment.getListView().setOnItemClickListener(
    new ListView.OnItemClickListener() {
      public void onItemClick(AdapterView<?> listView, View v,
          int pos,
          long id) {
        // タップした位置のURLを取得し、画面右側に表示させる
        Map<String, String> m = (Map<String, String>) adapter
          .getItem(pos);
        wvf.loadUrl(m.get("url"));
      }
    });

ハイライト表示の箇所が変更箇所となります。

これでちゃんと動作するかを確認しましょう。前回のサンプルアプリ同様、左側のリストをタップするとWebページが表示されることを確認してください。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30