Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidのFragmentでコンテキスト(Context)を取得・使用する方法を徹底解説


はじめに

この記事では、Androidアプリ開発においてフラグメント(Fragment)内でコンテキスト(Context)を取得して使用する方法を、実際のサンプルコードとともにステップごとにわかりやすく解説します。

フラグメントは単体では動作せず、必ず親となるアクティビティ(Activity)に紐づいて実行されます。そのため、フラグメント内でコンテキストが必要な場面では、getActivity()メソッドなどを使って親アクティビティのコンテキストを取得するのが基本の考え方です。

手順1:新しいプロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。

手順2:activity_main.xmlにコードを追加する

res/layout/activity_main.xml を開き、以下のコードを記述します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <LinearLayout
      android:id="@+id/linearlayout01"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:background="#ccc"
      android:layout_weight="1"
      android:orientation="vertical">
      <fragment android:name="com.example.myapplication.FirstFragment"
         android:id="@+id/frag_1"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent" />
   </LinearLayout>
   <LinearLayout
      android:id="@+id/linearlayout02"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1"
      android:background="#eee"
      android:orientation="vertical">
      <fragment android:name="com.example.myapplication.SecondFragment"
         android:id="@+id/frag_2"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent" />
   </LinearLayout>
</LinearLayout>

上記のレイアウトでは、画面を縦方向に2分割し、上半分に FirstFragment、下半分に SecondFragment の2つのフラグメントを配置しています。

手順3:MainActivity.javaにコードを追加する

src/MainActivity.java に以下のコードを記述します。

package com.example.myapplication;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
}

手順4:FirstFragment.javaにコードを追加する

src/FirstFragment.java に以下のコードを記述します。

package com.example.myapplication;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class FirstFragment extends Fragment {
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment, null);
      TextView but = (TextView) root.findViewById(R.id.text);
      but.setText(""+getActivity());
      return root;
   }
}

ここでのポイントは but.setText(""+getActivity()) の部分です。getActivity() を呼び出すことで、このフラグメントが紐づいている親アクティビティ(=コンテキスト)を取得できます。取得した内容をTextViewに文字列として表示することで、コンテキストが正しく取得できているかを確認できます。

手順5:SecondFragment.javaにコードを追加する

src/SecondFragment.java に以下のコードを記述します。

package com.example.myapplication;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class SecondFragment extends Fragment {
   TextView textView;
   View view;
   @Nullable
   @Override
   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
      view = inflater.inflate(R.layout.fragment, container, false);
      return view;
   }
}

アプリを実行してみよう

それでは、作成したアプリケーションを実行してみましょう。ここでは、実機のAndroidスマートフォンをパソコンに接続していることを前提としています。

Android Studioからアプリを起動するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーにある実行(Run)アイコンをクリックします。表示された候補から接続したモバイルデバイスを選択すると、端末の画面に結果が表示されます。

AndroidのFragmentでコンテキスト(Context)を取得・使用する方法を徹底解説

補足:より安全なコンテキストの取得方法

古いサポートライブラリ時代のコードでは getActivity() が広く使われていましたが、フラグメントがアクティビティから切り離されたタイミングで null を返す可能性がある 点には注意が必要です。

現在主流のAndroidX環境では、null非許容のコンテキストを返す requireContext()requireActivity() を使うことで、NullPointerExceptionのリスクを抑えながら、より安全にコンテキストを取得できます。新規プロジェクトで開発する場合は、こちらの方法を採用することをおすすめします。


  1. AndroidのツールバーでSearchViewを実装する方法【ステップ解説】

    はじめに 本記事では、Androidアプリのツールバー(Toolbar)にSearchViewを組み込み、リストの絞り込み検索機能を実装する方法を、ステップバイステップで解説します。サンプルとして月名の一覧をListViewに表示し、SearchViewに入力したキーワードでリアルタイムに検索結果をフィルタリングする仕組みを作ります。 手順1:新規プロジェクトの作成 まず、Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2:レイアウトファイルの編集 次に、res/lay

  2. 【Android】XmlPullParserを使ってXMLを解析する方法をステップ別に解説

    XmlPullParserとは XmlPullParserは、Androidに標準で組み込まれているXMLパーサーです。イベント駆動型(プル型)の解析方式を採用しており、XMLドキュメントを先頭から順に読み進めながら「開始タグ」「テキスト」「終了タグ」といったイベントを一つずつ処理していきます。DOMのようにドキュメント全体をメモリ上に展開しないため、省メモリかつ高速に動作し、リソースが限られたモバイル環境でのXML解析に最適です。 本記事では、XmlPullParserを使ってユーザー情報が記述されたXMLファイルを解析し、その結果をListViewに表示するサンプルアプリの作成手順を、ステ