現在有了 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 加入返回鍵
謝謝版主,參考您的方法後,問題已經解決。
回覆刪除