簡易ブラウザの作成(その3)

2010年6月3日(木)
谷口 岳

入力データの受け渡し

では、入力された文字列を取得して呼び出し、元のWebView画面に返す部分を書いていきましょう。

まずは、入力された文字列を返す部分です。

MyWebView/src/com.example.mywebview/GoActivity.javaに、以下のコードを追加してください。


public class GoActivity extends Activity {
    <i><font color=red>public  static final String THE_URL = "THE_URL";</font></i>

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.go_activity);
    
        // OKボタン
        <i><font color=red>Button okButton  = (Button)findViewById(R.id.button_ok);
        okButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){
                //Editコントロールから文字列を取得する。
                EditText edit = (EditText)findViewById(R.id.url_edit_text);
               
                //入力値をIntentの拡張項目へ登録
                Intent intent = new Intent();
                intent.putExtra(THE_URL, edit.getText().toString()); 
            
                // 閉じる
                setResult(RESULT_OK, intent);
                finish();
            }    
        });</font></i>

    }
}

ボタンにアクセスするため、idを使用してボタンのクラス(インスタンス)を取得します。

そして、setOnClickListenerを使用し、ボタンが押されたときの処理をボタンに対して設定します。

onClickの中では、以下のような処理を行っています。

  • idを使用してエディット・コントロールにアクセスできるようにする。
  • Intentを作成する。
  • 親画面(WebView画面)に値を返すためにIntentを作成します。
    IntentはActivity間でやり取りされるデータです。

  • putExtraを使用して、作成したIntentの拡張項目にエディット・コントロールから取得した文字列を格納します。
  • 文字列は「THE_URL」というキー(親側から使用できるようにStaticで宣言しています。)とともに格納します。
    このキーは親画面が値を取得する際に使用します。

  • setResultを使用して、Activityの実行結果と親画面に返すIntentを設定します。
  • finishを呼び出すことでActivityが終了します。

次は、呼び出した側で、入力されたURLを取得する部分を記述していきます。

MyWebView/src/com.example.mywebview/MyWebView.javaに、以下のコードを追加してください。



@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	//ハンドリング対象外のリクエストは無視
    	if (requestCode != GO_MENU_ID) {
    		return;
    	}
    	
    	//OKで以外で戻ってきたら何もしない
    	if (resultCode != RESULT_OK) {
    		return;
    	}
    	
    	//URLが入力されたと見なしロードする
    	WebView webView = (WebView)findViewById(R.id.main_webview);
    	webView.loadUrl(data.getStringExtra(GoActivity.THE_URL));
    }

onActivityResultは、MyWebViewが呼び出したActivityから戻り値がある場合に呼び出されるハンドラです。

startActivityforResultで起動されるすべてのActivityの終了時に、このメソッドが呼び出されます。 以下の3つの値を使って、このメソッド内で全Activityの戻り値を判断します。

  • どのActivityの戻り値なのか(requestCode)
  • 実行結果はどうだったか(resultCode)
  • Activityが返してきたデータ(data)

今回は、Activityは1つしかありませんが、GO_MENU_ID(URL入力画面)からの戻り値かどうかを確認しています。

また、resultCodeも、今回のActivityからはOKしか返していませんが、「戻るボタン」が押されたときなどにはRESULT_CANCELが返りますので、 きちんと判定する必要があります。

resultCodeを確認した後、Activityが返してきたIntentから入力されたURL文字列を取り出してWebViewに渡し、リロードしています。

これで実装完了です。

URL入力ダイアログに、お好みのURLを入力してみてください。

WebViewに指定した画面が表示されればOKです。

まとめ

これまで5回にわたって、アンドロイド・アプリの開発方法を説明しました。開発環境の構築から簡易ブラウザの作成まで、 アンドロイド・アプリを開発する作業について一通り説明できたのではないかと思います。

今回説明した範囲は、Androidプログラミングのほんの一部分にすぎません。Androidが標準で提供している機能や部品は、 まだまだたくさん(困るほど)あります。

第2回でも書きましたが、 米Googleから提供されているサンプル・プログラムなど、できるだけ多くの実装例に触れることが、プログラムの書き方を早く学ぶコツです。

Androidは、これからもどんどん進化していくことでしょう。どんどん新しい機能を試してみて、アンドロイド・アプリの作成を楽しんでください。

最後までお付き合いいただき、ありがとうございました。

タオソフトウェア株式会社 代表取締役

Android OS発表直後からAndroid開発を開始 Android Market上に多数のアプリを公開、また多くの受託案件、コンサルタント等を行い、Androidに特化した企業に転換を図る URL http://www.taosoftware.co.jp/ Twitter tao_gaku

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています