2014-01-21 52 views
1

假設我有兩項活動 - MainActivityNameActivityMainActivity打開NameActivity以便通過調用startActivityForResult(...)從用戶那裏獲得一些輸入。如何在導航時從Android活動返回結果?

NameActivity,我已經覆蓋了finish方法,使壓制將返回名稱的結果:

@Override 
public void finish() { 
    String name = nameEditText.getText().toString(); 
    Intent intent = new Intent(); 
    intent.putExtra(RESULT_NAME, name); 
    this.setResult(RESULT_OK, intent); 

    super.finish(); 
} 

在MainActivity,我的處理結果如下:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
     case REQUEST_CODE_GET_NAME: 
      if (resultCode == RESULT_OK) { 
       String name = data.getStringExtra(SelectionActivity.RESULT_NAME); 
       Toast.makeText(this, "Hi " + name + "!", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
     default: 
      break; 
    } 
} 

在操作欄中使用向上按鈕時,有沒有辦法讓NameActivity做同樣的事情?注意:我的應用程序的目標是Android 4.0(ICS)及其以上版本,所以Up導航「自動地」發生 - 也就是說,我沒有編寫任何代碼,只需在我的Manifest中指定父級活動,如下所示:

<activity 
    android:name="com.example.subactivitytest.NameActivity" 
    android:label="@string/title_activity_name" 
    android:parentActivityName="com.example.subactivitytest.MainActivity" > 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="com.example.subactivitytest.MainActivity" /> 
</activity> 

謝謝!

回答

2

你可以永遠只是打電話給你的方法完成你的onOptionsItemSelected()方法:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
        finish(); 
        return true; 
      } 

此外,請確保您已啓用home鍵:getActionBar().setHomeButtonEnabled(true);

+0

非常感謝,這已經完成了。我曾在其他地方看過,但假設android.R.id.home是主頁按鈕(底部的中間按鈕),而不是操作欄中的向上按鈕 - 奇怪的術語... –

+0

此外,它似乎沒有調用getActionBar()setHomeButtonEnabled(真)。 - 無論如何添加這條線(對於其他設備等)還是不必要的? –

+1

它可能是由你的清單聲明處理的,所以在你的情況下它可能是不必要的。 – Submersed

0

將您的代碼移到onPause()以確保它始終存儲。但我不知道你的方法爲什麼不起作用 - 我認爲向上按鈕確實完成了活動。

+0

我有現在這個工作通過調用完成()從onOptionsItemSelected()方法根據接受的答案,感謝您的答覆,雖然@ Tenfour04。 –

+0

呵呵,我想知道爲什麼finish()doens不會被這個動作調用。 – Tenfour04