2012年12月27日木曜日

Activityの引数(setResult, onActivityResult)

簡単なActivity遷移を記述してみましょう。

画面を立ち上げて、
ボタンを押下するとsub画面が立ち上がるアプリです。

サブ画面でアプリの戻るボタンを押すと、
サブ画面が終了して、メイン画面に戻る仕様です。


■メインアクティビティ

package com.example.finishactivity;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

    private int iNo = 1;
    private final int iMAIN = 0;
    private final int iSUB  = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Toast.makeText(getApplicationContext(), "初期呼び出し", Toast.LENGTH_SHORT).show();
        
  //ボタンの作成
  Button button = new Button(getApplication());
        //ボタンに表示される文字列を設定
  button.setText("サブ画面呼び出し");
        //ボタンにIDを設定
  button.setId(iSUB);
  button.setOnClickListener(this);
        addContentView(button, new LinearLayout.LayoutParams( 350,70));
    }

    public void onClick(View view){
        //どのボタンを押すかの判定
        switch(view.getId()){
            case iSUB:
                Intent intent = new Intent(this, SubActivity.class);
                //Activityに引数を渡す
                intent.putExtra("count", String.valueOf(iNo));
                iNo += 1;
                //Activityを開始。iMAINで呼び出し元のActivityを判断できるようにする
                startActivityForResult(intent, iMAIN);
              break;
           default:
               break;
        }
    }

    
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //LOGで引数が返ってきているかを確認しよう
        Log.d("onActivityResule","requestCode:" + requestCode + " resultCode:" + resultCode);
        
        //requestCodeでそのActivityを呼び出したActivityを判断
        if (requestCode == iMAIN){
            //resultCodeで呼び出し先からのActivityの引数を取得
            if (resultCode == RESULT_OK){
                Toast.makeText(getApplicationContext(), "「サブ画面から戻ったよ」のお知らせ", Toast.LENGTH_SHORT).show();
            }
        }
    }
}


■呼び出しされるActivity

package com.example.finishactivity;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.KeyEvent;
import android.widget.LinearLayout;
import android.widget.TextView;


public class SubActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // テキストビューの生成
        TextView textView = new TextView(getApplication());

        //呼び出し元の引数の取得
        Intent i = getIntent();
        //Key(count)から、Itemを取得
        String keyword = i.getStringExtra("count");

        textView.setText(keyword + "回目");
        addContentView(textView, new LinearLayout.LayoutParams( 100,70));
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // BackBtnアクション
        if(keyCode==KeyEvent.KEYCODE_BACK){
            //戻るActivity先に引数を渡す
            setResult(RESULT_OK);
            //Activityの終了
            this.finish();
            return true;
        }
        return false;
    }
    
}


■マニフェストファイル
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.finishactivity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.finishactivity.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.finishactivity.SubActivity"
            android:label="@string/app_name" >
        </activity>
</application>

</manifest>


こんな感じです。

実行すると

■初期画面
 ■ボタン押下後
 ■戻るボタン押下後
 ■この処理を繰り返すと




基本的なActivityの動かし方でした。



//Activityに引数を渡す
intent.putExtra("count", String.valueOf(iNo));

こちらの処理で呼び出し元のActivityから、新しい
Activityに引数を渡しています。

Intent i = getIntent();
String keyword = i.getStringExtra("count");

こちらで、先ほど渡した引数を取得しています。


また、
setResult(RESULT_OK);
で、呼び出し先のActivityから、呼び出し元の
Activityに引数を渡しています。

呼び出し先の処理が成功したら1
呼び出し先の処理が失敗したら0

を返す様な形にすると、呼び出し元のActivityに
戻った時に処理結果を取得できます。


0 件のコメント:

コメントを投稿