AndroidのstartActivity ForResult()とonActivity Result()とsetResult()のパラメータ解析

7767 ワード

参考:AndroidのstartActivity ForResult()とonActivity Result()とsetResult()パラメータ解析、activityパラメータの戻り
一、シーンの使用
1つのメインインタフェース(メインActivity)で複数の異なるサブActivityに意図的にジャンプし、サブモジュールのコード実行が完了した後に再びホームページに戻り、サブactivityで得られたデータをメインインタフェース/完了したデータに表示してメインActivity処理に渡す.このようなバンドデータの意図的なジャンプにはactivityのonActivity Result()メソッドを用いる必要がある.
(1)startActivityForResult(Intent intent, int requestCode);
最初のパラメータ:次のインタフェースにジャンプして使用するデータを運ぶためのIntentオブジェクト、putExtra(A,B)メソッドを使用して、ここに格納されているデータ型は特に多く、基本タイプはすべてサポートされています.
2番目のパラメータ:>=0の場合、Activityが終了するとrequestCodeはonActivity Result()に返されます.ターゲットactivityを識別するために返されるデータがどのActivityから返されるかを決定します.
以下のresultCode機能と一致して、Androidはデータの厳格な一致性を保証するためにわざわざ2つのロックを設けて、データの送信、目的地の厳格な一致性を保証しているような気がします.
(2)onActivityResult(int requestCode, int resultCode, Intent data)
最初のパラメータ:この整数requestCodeはstartActivity ForResultのrequestCodeの値と比較して、返されたデータがどのActivityから返されたかを確認するために使用されます.
2番目のパラメータ:この整数resultCodeは、サブActivityによってsetResult()メソッドで返されます.複数のactivityがデータを返す場合に適用され、どのactivityが返す値なのかを識別します.
3番目のパラメータ:返されるデータを持つIntentオブジェクト.dataでgetXxxExtra( );指定したデータ型のデータを取得する方法です.
(3)setResult(int resultCode, Intent data)
ジャンプを意図した宛先インタフェースでこのメソッドを呼び出してActivityが返したいデータをプライマリActivityに返し、
最初のパラメータ:Activityが終了するとresultCodeはonActivity Result()に返され、一般的にRESULT_CANCELED , RESULT_OKこの値のデフォルトは-1です.
2番目のパラメータ:1つのIntentオブジェクトで、プライマリActivityへのデータを返します.intentオブジェクトに返されるデータを持ち込み、putExtra()メソッドを使用します.
Demo紹介:メインactivityでユーザーにそれぞれ2つのedittextに2つの数を入力させ、この2つの数を次のactivityに渡し、次のactivityで結果を計算して返します.
/*
  *  activity               
  * 
  */
 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.EditText;
 
 public class MainActivity extends Activity {
 
     private Button button;
     private final static int REQUESTCODE = 1; //       
     private EditText one, two, result;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         one = (EditText) findViewById(R.id.Text_one);
         two = (EditText) findViewById(R.id.Text_two);
         result = (EditText) findViewById(R.id.Text_result);
         button = (Button) findViewById(R.id.button);
         button.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 // TODO Auto-generated method stub
                 //           
                 int a = Integer.parseInt(one.getText().toString());
                 int b = Integer.parseInt(two.getText().toString());
 
                 //     activity   
                 Intent intent = new Intent(MainActivity.this,
                         OtherActivity.class);
                 intent.putExtra("a", a);
                 intent.putExtra("b", b);
                  
                 //       :startActivity(intent);       
                 startActivityForResult(intent, REQUESTCODE); //REQUESTCODE--->1
             }
         });
     }
 
     //       
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         // RESULT_OK,      activity          ,Standard activity result:
         // operation succeeded.     -1
         if (resultCode == 2) {
             if (requestCode == REQUESTCODE) {
                 int three = data.getIntExtra("three", 0);
                 //            
                 result.setText(String.valueOf(three));
             }
         }
    }
 
}


//主activity対応レイアウトファイル

  
      
 
         
 
         
 
         
 
         
 
         
     
 
     

//第二个activity

  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.EditText;
  import android.widget.TextView;
  
  public class OtherActivity extends Activity {
 
     private Button button;
     private TextView textView;
     private EditText editText;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super.onCreate(savedInstanceState);
         setContentView(R.layout.other);
         button = (Button) findViewById(R.id.button2);
         textView = (TextView) findViewById(R.id.msg);
         editText = (EditText) findViewById(R.id.Text_three);
         //          ,     
         Intent intent = getIntent();               intent  Return the intent that started this activity. 
         int a = intent.getIntExtra("a", 0); //         0
         int b = intent.getIntExtra("b", 0); //         0
         textView.setText(a + " + " + b + " = " + " ? ");
 
         button.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 // TODO Auto-generated method stub
                 Intent intent = new Intent();
                 //           
                 int three = Integer.parseInt(editText.getText().toString());
                 intent.putExtra("three", three); //         
                 //  intent      ,       setResult  ,
                 //setResult(resultCode, data);            ,      1   ,  
                 setResult(2, intent);
                 
                 finish(); //     activity     
             }
         });
     }
 }

//レイアウトファイル


	="vertical" />

    	="wrap_content" />