onActivity Resultの使い方

10253 ワード

主な機能:1つのメインインタフェース(メインActivity)に多くの異なるサブ機能モジュール(サブActivity)に接続でき、サブモジュールの仕事が終わったらメインインタフェースに戻り、サブモジュールが完成したデータをメインActivity処理に渡すこともできます.このようなデータ交換には、コールバック関数onActivity Resultが使用されます.<1>startActivityForResult(Intent intent, int requestCode); **1番目のパラメータ:Intentオブジェクトの2番目のパラメータ:>=0の場合、Activityが終了するとrequestCodeはonActivity Result()に返されます.返されたデータがどのActivityから返されたかを判断するために**
<2>onActivity Result(int requestCode,int resultCode,Intent data)**最初のパラメータ:この整数requestCodeはonActivity Resultに提供され、返されたデータがどのActivityから返されたかを確認します.このrequestCodeはstartActivity ForResultのrequestCodeに対応しています.2番目のパラメータ:この整数resultCodeは、サブActivityによってsetResult()メソッドで返されます.3番目のパラメータ:返されるデータを持つIntentオブジェクト.**
<3>setResult(int resultCode,Intent data)このメソッドを呼び出してActivityが返したいデータを親Activity**の最初のパラメータに返します.Activityが終了するとresultCodeはonActivity Result()に返され、一般的にRESULT_CANCELED , RESULT_OK. 2番目のパラメータ:1つのIntentオブジェクトで、親Activityへのデータを返します.**
この例では、Activityが3つあります.火星に飛んでotherActivityにジャンプし、地球が火星に与えたメッセージをotherActivityに表示します.クリックして地球に戻ると火星が地球に持ってきたメッセージを主Activity.に伝えます.同理:月に飛んでthirdActivityにジャンプし、地球が月に与えたメッセージをthirdActivityに表示する.クリックして地球に戻る時に月が地球に持ってきたニュースを主Activity.に伝えます.
具体的な実装:メインActivity:
package xiaosi.onActivityResult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class OnActivityResultActivity extends Activity {
    private Button              button  = null;
    private Button              button1 = null;
    private TextView            text    = null;
    private static final int    Mars    = 0;
    private static final int    Moon    = 1;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        text = (TextView) findViewById(R.id.text);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(OnActivityResultActivity.this, otherActivity.class);
                String content = " : , 。 ";
                intent.putExtra("FromEarth", content);
                startActivityForResult(intent, Mars);
            }
        });
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(OnActivityResultActivity.this, thirdActivity.class);
                String content = " : , 。 ";
                intent.putExtra("FromEarth", content);
                startActivityForResult(intent, Moon);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        switch (requestCode)
        {
        case Mars:
            Bundle MarsBuddle = data.getExtras();
            String MarsMessage = MarsBuddle.getString("FromMars");
            text.setText(MarsMessage);
            break;
        case Moon:
            Bundle MoonBuddle = data.getExtras();
            String MoonMessage = MoonBuddle.getString("FromMoon");
            text.setText(MoonMessage);
            break;
        }
    }
}

otherActivity.java
package xiaosi.onActivityResult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class otherActivity extends Activity {
    private Button  button  = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other);
        Intent EarthIntent = getIntent();
        String EarthMessage = EarthIntent.getStringExtra("FromEarth");
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(otherActivity.this, OnActivityResultActivity.class);
                String passString = " :Hello, Jack, ";
                intent.putExtra("FromMars", passString);
                setResult(RESULT_OK, intent);
                finish();
            }
        });
        TextView textView = (TextView) findViewById(R.id.othertext);
        textView.setText(EarthMessage);
    }
}

thirdActivity.java
package xiaosi.onActivityResult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class thirdActivity extends Activity {
    private Button  button  = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.third);
        Intent EarthIntent = getIntent();
        String EarthMessage = EarthIntent.getStringExtra("FromEarth");
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(thirdActivity.this, OnActivityResultActivity.class);
                String passString = " :Hello, Lucy, ";
                intent.putExtra("FromMoon", passString);
                setResult(RESULT_OK, intent);
                finish();
            }
        });
        TextView textView = (TextView) findViewById(R.id.thirdtext);
        textView.setText(EarthMessage);
    }
}