My Blog

~岩手から発信中~

【Android】FragmentでIdを取得する方法

SDK toolがバージョン22.6になり、自動生成されるファイルが増えました。

「fragment_main.xml」が新しく自動生成されるようになったみたいですね。

プロジェクトを作成すると、レイアウトファイル(res/layout)に「activity__main.xml」と「fragment_main.xml」の二つが作成されるそうです。

そこで、新しく自動生成されるようになったFragmentのファイルにボタンを配置して、トーストで文字を表示するとういうことをやってみようとしたのですが、ActivityでやっているようにしてIdを取得しようとするとエラーが出てしまい、つまずいてしまったので正しい取得方法を書いていきたいと思います。

ちなみにFragmentではfindViewByIdが定義されていないから上手くいかないみたいです。

Idの取得方法


MainActivityにも以下のコードが加わりました。 このコードの「onCreateView」の中に処理を書いていきます。

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
            }
        return rootView;
    }
}

それでは、処理を書いていきたいと思います。

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
            }

        //上記に書いてあるrootViewを使ってfindViewByIdをしてIdを取得する
        Button button = (Button)rootView.findViewById(R.id.button1);

        // ボタンがクリックされた時に呼び出されるコールバックリスナーを登録します
        button.setOnClickListener(new View.OnClickListener() {
            @Override
                public void onClick(View v) {
                    //FragmentではToastを使うときgetActivityが必要
                    Toast.makeText(getActivity(), "トーストのテストです。", Toast.LENGTH_LONG).show();
                }
        });

        return rootView;
    }
}

上記のように記述することで、ボタンを押すとトーストが表示されます。

ここで、Idを取得するために使ったのが「rootView」です。 inflaterでViewを持ってきて、ViewからfindViewByIdをしただけみたいです。

これを使って、「rootView.findViewById」とすることで、FragmentでIdを取得できます。

また、トーストを表示するときFragmentでは「getActivity」を追加しないとエラーが出てしまうので、注意が必要です。

FragmentではActivityと記述方法が違ってくるので注意して書いていきたいですね。


参考サイト:

http://furudate.hatenablog.com/entry/2013/06/21/180006 http://sakplus.jp/2011/08/15/hello-fragment/