スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

アクティビティの終了コードを取得する

起動したアクティビティの終了コードを、起動元のアクティビティが取得する方法。ポイントは「startActivityForResult関数と、setResult関数、イベントonActivityResultのoverride」を使用すること。



// 起動元アクティビティのソースコード
public class SampleHello extends Activity
{
private static final int LAUNCHED_ACTIVITY = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// ボタンがクリックされたら、アクティビティ起動
Button button = (Button)findViewById(id.Button01);
button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), NextActivity.class);
startActivityForResult(i, LAUNCHED_ACTIVITY); // 起動したアクティビティから結果を貰うため。
}
});
}

// 起動終了イベントをハンドリング?
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// 戻った起動要求コードで、どのアクティビティが終了したかを判断
if (requestCode == LAUNCHED_ACTIVITY)
{
TextView textView = (TextView)findViewById(R.id.MainTextView);
// resultCodeには、起動先アクティビティのsetResultで指定された値が入る
if (resultCode == RESULT_OK)
{
textView.setText("OK.");
}
else
{
textView.setText("OTHERS.");
}
}
// ハンドリングしたくないものについては、スーパークラスのonActivityResultを呼び出す。
else
{
super.onActivityResult(requestCode, resultCode, data);
}
}
}

呼び出し元アクティビティのソースコードでのポイントとしては、「起動時にstartActivityForResult関数を用いる事」と「アクティビティの終了時に呼び出されるonActivityResultをoverrideすること」。



// 呼び出し先アクティビティのソースコード
public class NextActivity extends Activity {
@Override
public void onCreate(Bundle b)
{
super.onCreate(b);
setContentView(R.layout.nextactivity);

// OKボタンの実装
Button okButton = (Button)findViewById(R.id.OK);
okButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// 戻り値としてRESULT_OKを起動元アクティビティへ
setResult(RESULT_OK);
finish();
}
});

// キャンセルボタンの実装
Button cancelButton = (Button)findViewById(R.id.CANCEL);
cancelButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// 戻り値としてRESULT_CANCELEDを起動元アクティビティへ
setResult(RESULT_CANCELED);
finish();
}
});
}
}

これを実行すると、メインのアクティビティ(SampleHello)のボタンをクリックすると、次のアクティビティ(NextActivity)が起動される。そこでOKボタンを押すとNextActivityが終了し、RESULT_OKがSampleHelloに渡されて、SampleHelloのTextViewに「OK」と表示される。逆にNextActivityでCANCELボタンを押すと、NextActivityが終了し、RESULT_CANCELEDがSampleHelloに渡されて、SampleHelloのTextViewに「OTHERS」と表示される。


SampleHello.png

起動元アクティビティSampleHello起動直後の画面


NextActivity.png

起動先アクティビティNextActivity起動後の画面


SampleHello_ok.png

OKボタンが押されてNextActivityが終了した後、SampleHelloアクティビティに戻ってきたときの画面。RESULT_OKが戻ってきたので、TextViewに「OK」と表示される。




何て事ないプログラムだけれども、やっぱり動くと楽しいね。プログラマーズハイみたいな。

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

sepiablue

Author:sepiablue
組込みソフトウェアエンジニアやってます。普段はC言語使い。
趣味はプログラミング、京都旅行で神社巡り。
AndroidアプリをMacで開発中。

最新記事
スポンサードリンク
スポンサードリンク
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。