StartActivity ForResultの使い方

3411 ワード

最初のActivityを2番目のActivityに開き、2番目のActivityが最初のActivityにデータを返す場合は、最初のActivityでpublic void onActivity Result(int requestCode,int resultCode,Intent data)メソッドを書き換える必要があります.手順の詳細1を使用して、最初のActivityでstartActivity ForResultメソッドを呼び出します.
//     Activity        
//         ,            
startActivityForResult(new Intent(FirstActivity.this, SecondActivity.class), 1);

2、2番目のActivityでsetResultメソッドで戻り値を設定します.
//     Intent  
Intent intent = new Intent();
//       Intent
intent.putExtra("result", "My name is luis");
//      
SecondActivity.this.setResult(RESULT_OK, intent);//RESULT_OK      ,    
//  Activity
OtherActivity.this.finish();

3、最初のActivityでonActivity Resultメソッドを書き換え、データはdataから取得できる.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
   String result = data.getExtras().getString("result");//   Activity         
}

メモ:requestCodeの役割startActivity ForResult(Intent intent,int requestCode)メソッドを使用して新しいActivityを開きます.startActivity ForResult()メソッドに要求コード(2番目のパラメータ)を入力する必要があります.要求コードの値は、業務の必要に応じて自己設定され、要求ソースを識別するために使用される.たとえば、1つのActivityには2つのボタンがあり、この2つのボタンをクリックすると同じActivityが開きます.そのボタンが新しいActivityを開いても、この新しいActivityがオフになると、前のActivityのonActivity Result(int requestCode,int resultCode,Intent data)メソッドが呼び出されます.onActivity Result()メソッドでは、新しいActivityがそのボタンで開いていることを知り、対応するビジネス処理を行う必要がある場合は、次のようにします.
@Override  public void onCreate(Bundle savedInstanceState) {
        ....
        button1.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                startActivityForResult (new Intent(FirstActivity.this, SecondActivity.class), 1);

           }

        });
        button2.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                 startActivityForResult (new Intent(FirstActivity.this, SecondActivity.class), 2);

            }

        });

                          
       @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
               switch(requestCode){
                   case 1:
                   //    1   ,       
                   case 2:
                   //    2   ,       
                }
          }
}

resultCodeは1つのActivityに作用し、startActivity ForResult()メソッドを使用して複数の異なるActivityを開いて異なるビジネスを処理する場合があります.これらの新しいActivityがオフになると、前のActivityのonActivity Result(int requestCode,int resultCode,Intent data)メソッドが呼び出されます.返されたデータがどの新しいActivityから来たのかを知るには、onActivity Result()メソッドで次のようにします(SecondActivityとThirdActivityは、開く新しいActivityです):
public class SecondActivity extends Activity {
       .....
       SecondActivity.this.setResult(1, intent);
       SecondActivity.this.finish();
}
public class ThirdActivity extends Activity {
       ......
        ThirdActivity.this.setResult(2, intent);
        ThirdActivity.this.finish();
}
public class FirstActivity extends Activity { //   Activity   SecondActivity ThirdActivity
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
               switch(resultCode){
                   case 1:
                   // ResultActivity     
                   case 2:
                    // NewActivity     
                }
          }
}