2017-01-19 3 views
1

私はfinish()を呼び出した後に戻ったアクティビティに情報を送ることができますか?finish()にIntent extraを渡すことはできますか?

たとえば、ユーザーに自分のフィードにメッセージを投稿できるようにするアクティビティSendMessageActivity.classがあります。そのメッセージがサーバに保存されると、私はfinish()に電話します。代わりに新しいインテントを使用してMainActivity.classを開始するだけですか?それとも、ライフサイクル開発がちょうど終了するのが良いですかSendMessageActivity.class

新しいアクティビティを開始する時点が表示されません。現在のアクティビティを閉じると、常にMainActivity.classに戻ります。現在のアクティビティを終了した後、Stringを余分に送信するにはどうすればよいですか?

答えて

2

使用onActivityResult

onActivityResultを理解するのに役立ちます。あなたは別のアクティビティを開始することができ、その後、onActivityResult() method.So onActivityResult()でその活動から結果を受け取るstartActivityForResult(Intent intent, int requestCode)を使用することにより

は、別のアクティビティを開始するところからです。

onActivityResult(int requestCode, int resultCode, Intent data)ここでパラメータを確認してください。リクエストコードは、結果をどこから取得したものかをフィルタリングするためのものです。それらのrequestCodesを使用して異なるデータを識別することができます!

public class MainActivity extends Activity { 

     // Use a unique request code for each use case 
     private static final int REQUEST_CODE_EXAMPLE = 0x9988; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      // Create an Intent to start AnotherActivity 
      final Intent intent = new Intent(this, AnotherActivity.class); 

      // Start AnotherActivity with the request code 
      startActivityForResult(intent, REQUEST_CODE_EXAMPLE); 
     } 

     //-------- When a result is returned from another Activity onActivityResult is called.--------- // 
     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 

      // First we need to check if the requestCode matches the one we used. 
      if(requestCode == REQUEST_CODE_EXAMPLE) { 

       // The resultCode is set by the AnotherActivity 
       // By convention RESULT_OK means that what ever 
       // AnotherActivity did was successful 
       if(resultCode == Activity.RESULT_OK) { 
        // Get the result from the returned Intent 
        final String result = data.getStringExtra(AnotherActivity.EXTRA_DATA); 

        // Use the data - in this case, display it in a Toast. 
        Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show(); 
       } else { 
        // AnotherActivity was not successful. No data to retrieve. 
       } 
      } 
     } 
    } 

AnotherActivity < - この私たちはMainActivity

public class AnotherActivity extends Activity { 

     // Constant used to identify data sent between Activities. 
     public static final String EXTRA_DATA = "EXTRA_DATA"; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_another); 

      final View button = findViewById(R.id.button); 
      // When this button is clicked we want to return a result 
      button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        // Create a new Intent as container for the result 
        final Intent data = new Intent(); 

        // Add the required data to be returned to the MainActivity 
        data.putExtra(EXTRA_DATA, "Some interesting data!"); 

        // Set the resultCode to Activity.RESULT_OK to 
        // indicate a success and attach the Intent 
        // which contains our result data 
        setResult(Activity.RESULT_OK, data); 

        // With finish() we close the AnotherActivity to 
        // return to MainActivity 
        finish(); 
       } 
      }); 
     } 

     @Override 
     public void onBackPressed() { 
      // When the user hits the back button set the resultCode 
      // to Activity.RESULT_CANCELED to indicate a failure 
      setResult(Activity.RESULT_CANCELED); 
      super.onBackPressed(); 
     } 
    } 

にデータを送信するために使用するもの注:今、あなたはREQUEST_CODEを指定そこstartActivityForResultMainActivityであなたをチェックします。結果を得るために3つの異なるアクティビティを呼び出したいとします。REQUEST_CODEの3つのstartActivityForResultコールが3つあります。 REQUEST_CODEは、アクティビティで指定した一意のキーだけで、startActivityForResultの呼び出しを一意に識別します。

これらのアクティビティからデータを受け取ったら、REQUEST_CODEが何であるかを確認できます。この結果はこのアクティビティからのものです。

あなたはカラフルなカバーであなたの恋人にメールを送って、同じカバーで返信するようお願いします。その後、あなたから手紙を受け取ったら、誰があなたのためにそれを送ったかを知っています。 awww;)

3

アクティビティのset resultを使用して、データを初期化することができます。

最初のアクティビティでは、startActivityForResult()で新しいインスタンスを呼び出し、onActivityResultメソッドでデータを取得します。すべてが文書化されています。

1

ユーザーが戻っSendMessageActivity.classに行くことを避けるために、仕上げ()を呼び出した場合、あなたはあなたの意思にこのフラグを設定することができます。

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 

これはMainActivityを開き、活動からSendMessageActivityを削除しますスタック。最初のアクティビティに

1

はこれを試す第二の活動で今

Intent first = new Intent(ActivityA,this, ActivityB.class); 
startActivityForResult(first, 1); 

:(finish中に結果を設定)

Intent intent = new Intent(); 
    intent.putExtra("result",result); //pass intent extra here 
    setResult(RESULT_OK,intent);  
    finish(); 

最初の活動結果をキャッチ。

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
    super.onActivityResult(requestCode, resultCode, data); 
     // check if the request code is same as what is passed here it is 1 
     if(requestCode==1) 
      { 
       String message=data.getStringExtra("result"); 
       //get the result 
      } 
} 
関連する問題