Tips

Android タブレットとスマートフォンに対応したアプリケーション 【Android_TIPS】

HelloFragment/src/com.example.hellofragment/LeftFragment.java

package com.example.hellofragment;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class LeftFragment extends ListFragment {
    private String[] list = new String[] { "Google", "Yahoo", "Bing", "MSN",
            "goo" };
    private String[] url = new String[] { "http://www.google.co.jp/",
            "http://www.yahoo.co.jp/", "http://www.bing.com/",
            "http://jp.msn.com/", "http://www.goo.ne.jp/" };

    public interface OnSearchEngineSelectedListener {
        public void onSearchEngineSelected(String uri);
    }

    private OnSearchEngineSelectedListener listener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        listener = (OnSearchEngineSelectedListener) activity;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, list);
        setListAdapter(adapter);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        listener.onSearchEngineSelected(url[position]);
    }
}

17~19行目:OnSearchEngineSelectedListenerインタフェースを作り、コールバックメソッドを定義する。

 上記インタフェースを使い、LeftFragmentとRightFragment間のデータ連携を行う。インタフェースはMainActivityに実装しておく。

23~27行目:onAttach()メソッドをオーバーライドし、Activityオブジェクトをキャストしたものを

 OnSearchEngineSelectedListenerオブジェクトとして取得する。

38~41行目:onListItemClick()メソッドをオーバーライドし、ListViewをタップしたときの処理を記述する。

 ここでは、上記で取得したOnSearchEngineSelectedListenrオブジェクトのメソッドを呼び出す処理をしている。

 

この結果、LeftFragmentとMainActivityがリスナーによって連携したことになります。

MainActivityをOnSearchEngineSelectedListenerオブジェクトにキャスト

→LeftFragmentのItemをタップ(onListItemClick()コールバックメソッドが呼ばれる)

→MainActivityのonSearchEngineSelected()メソッドを呼び出される

→RightFragment(WebView)のURLが切り替わる

 

HelloFragment/src/com.example.hellofragment/RightFragment.java

package com.example.hellofragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;

public class RightFragment extends Fragment {
    public static RightFragment newInstance(String url) {
        RightFragment fragment = new RightFragment();

        Bundle args = new Bundle();
        args.putString("url", url);
        fragment.setArguments(args);

        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.right_fragment, container, false);

        if (getArguments() != null) {
            String url = getArguments().getString("url");
            WebView web = (WebView) v.findViewById(R.id.webView1);
            web.loadUrl(url);
        }
        return v;
    }
}

11~19行目:RightFragment(WebViewをもつFragment)をインスタンス化する際に、

 表示するURL指定する必要があるためstaticメソッドを定義する。

 引数をもつコンストラクタでも同じことができますが、推奨されていないようです。(警告がでてしまいます。)

 

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search