現在有了 Action Bar,Action Bar 內也有返回鍵,但 user 按了 Action Bar 的返回鍵,並不會觸發 Parent Activity 的 onActivityResult(),要稍微改變一下寫法,才能觸發 Parent Activity 的 onActivityResult()。
MainActivity.java 內容:
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View v) { Intent intentChild = new Intent(this, ChildActivity.class); startActivityForResult(intentChild,0); // 呼叫 child activity,並要求回傳資料 } // 接收 child activity 傳回的資料 protected void onActivityResult(int requestCode, final int resultCode, final Intent data) { if(data!=null && resultCode==RESULT_OK) { Bundle bData = data.getExtras(); if(bData!=null) { String childactivity = bData.getString("activity"); if(childactivity.equals("ChildActivity")) { String answer = bData.getString("answer"); Toast.makeText(this,"answer is "+answer,Toast.LENGTH_LONG).show(); } } } } }
activity_main.xml 的內容:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.test.childtest.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Child Activity" android:id="@+id/button" android:onClick="onClick" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"/> </RelativeLayout>
menu_child.xml 的內容:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context=".ChildActivity"> <item android:id="@+id/action_save" android:title="存檔" android:orderInCategory="100" app:showAsAction="ifRoom" /> </menu>
ChildActivity.java 內容:
public class ChildActivity extends AppCompatActivity { private static final String TAG = "ChildActivity"; @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_child); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_child, menu); return true; } @Override public void onBackPressed() { // 按了 Android 裝置的實體返回鍵 // 準備回傳的資料 Bundle bData = new Bundle(); bData.putString("activity", TAG); bData.putString("answer", "Good job"); Intent mIntent = new Intent(); mIntent.putExtras(bData); setResult(RESULT_OK, mIntent); super.onBackPressed(); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch(id) { case android.R.id.home: // 按了 Action Bar 的返回鍵 onBackPressed(); return true; // 注意! 一定要回傳 true case R.id.action_save: return true; } return super.onOptionsItemSelected(item); } }
相關筆記 ----
【Android】設定 Support Library
【Android】啟用 Support Library 的 ActionBar
【Android】ActionBar 加入返回鍵
謝謝版主,參考您的方法後,問題已經解決。
回覆刪除