2016-01-03

【Android Studio】回傳資料給 Parent Activity

Honeycomb 3.0(API 11) 之前,Parent Activity 若呼叫 Child Activityuser 按了 Android 裝置上的硬體返回鍵,就會離開 Child Activity 返回 Parent Activity,並會觸發 Parent Activity 的 onActivityResult() 並將資料回傳給 Parent Activity

現在有了 Action BarAction Bar 內也有返回鍵,但 user 按了 Action Bar 的返回鍵,並不會觸發 Parent Activity 的 onActivityResult(),要稍微改變一下寫法,才能觸發 Parent ActivityonActivityResult()


MainActivity.java 內容:
  1.  
  2. public class MainActivity extends AppCompatActivity
  3. {
  4. private static final String TAG = "MainActivity";
  5.  
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState)
  8. {
  9. Log.d(TAG, "onCreate");
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. }
  13.  
  14. public void onClick(View v)
  15. {
  16. Intent intentChild = new Intent(this, ChildActivity.class);
  17. startActivityForResult(intentChild,0); // 呼叫 child activity,並要求回傳資料
  18. }
  19.  
  20. // 接收 child activity 傳回的資料
  21. protected void onActivityResult(int requestCode, final int resultCode, final Intent data)
  22. {
  23. if(data!=null && resultCode==RESULT_OK)
  24. {
  25. Bundle bData = data.getExtras();
  26. if(bData!=null)
  27. {
  28. String childactivity = bData.getString("activity");
  29. if(childactivity.equals("ChildActivity"))
  30. {
  31. String answer = bData.getString("answer");
  32. Toast.makeText(this,"answer is "+answer,Toast.LENGTH_LONG).show();
  33. }
  34. }
  35. }
  36. }
  37. }
  38.  


activity_main.xml 的內容:
  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <RelativeLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:tools="http://schemas.android.com/tools"
  6. android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. android:paddingBottom="@dimen/activity_vertical_margin"
  9. android:paddingLeft="@dimen/activity_horizontal_margin"
  10. android:paddingRight="@dimen/activity_horizontal_margin"
  11. android:paddingTop="@dimen/activity_vertical_margin"
  12. tools:context="com.test.childtest.MainActivity">
  13.  
  14. <Button
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="Child Activity"
  18. android:id="@+id/button"
  19. android:onClick="onClick"
  20. android:layout_alignParentTop="true"
  21. android:layout_alignParentLeft="true"
  22. android:layout_alignParentStart="true"/>
  23.  
  24. </RelativeLayout>
  25.  


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 內容:
  1.  
  2. public class ChildActivity extends AppCompatActivity
  3. {
  4. private static final String TAG = "ChildActivity";
  5.  
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState)
  8. {
  9. Log.d(TAG, "onCreate");
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_child);
  12. }
  13.  
  14. @Override
  15. public boolean onCreateOptionsMenu(Menu menu)
  16. {
  17. getMenuInflater().inflate(R.menu.menu_child, menu);
  18. return true;
  19. }
  20.  
  21. @Override
  22. public void onBackPressed()
  23. { // 按了 Android 裝置的實體返回鍵
  24. // 準備回傳的資料
  25. Bundle bData = new Bundle();
  26. bData.putString("activity", TAG);
  27. bData.putString("answer", "Good job");
  28. Intent mIntent = new Intent();
  29. mIntent.putExtras(bData);
  30. setResult(RESULT_OK, mIntent);
  31. super.onBackPressed();
  32. }
  33.  
  34. @Override
  35. public boolean onOptionsItemSelected(MenuItem item)
  36. {
  37. int id = item.getItemId();
  38. switch(id)
  39. {
  40. case android.R.id.home: // 按了 Action Bar 的返回鍵
  41. onBackPressed();
  42. return true; // 注意! 一定要回傳 true
  43. case R.id.action_save:
  44. return true;
  45. }
  46. return super.onOptionsItemSelected(item);
  47. }
  48. }
  49.  

相關筆記 ----
【Android】設定 Support Library
【Android】啟用 Support Library 的 ActionBar
【Android】ActionBar 加入返回鍵 


1 則留言:

  1. 謝謝版主,參考您的方法後,問題已經解決。

    回覆刪除