基于startActivityForResult方法處理兩個Activity之間數據傳遞問題
廢話不多說了,直接給大家貼代碼了。
package com.example.testactivityresquest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.button); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, Activityb.class); int[] nums = { , }; intent.putExtra(Changliang.KEY, nums); //有別于startActivity,如果啟動的其他Activity多了以后。相當于定一個特定KEY值,返回根據KEY值返回。 startActivityForResult(intent, Changliang.requestCode); } }); } //Activityb傳回來的數據在這個方法中獲取 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { int s = data.getIntExtra(Changliang.Activity_b_KEY, ); Toast.makeText(getApplicationContext(), "傳遞兩個數得到的和是:" + s, ).show(); } } package com.example.testactivityresquest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class Activityb extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activityb); Intent intent = this.getIntent(); int[] n = intent.getIntArrayExtra(Changliang.KEY); final int nums = n[] + n[]; Toast.makeText(this, n[] + " " + n[], ).show(); Button btn = (Button) findViewById(R.id.button); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Activityb.this, MainActivity.class); intent.putExtra(Changliang.Activity_b_KEY, nums); // 將數據根據特定鍵值的意圖事件導入 Activityb.this.setResult(Changliang.requestCode, intent); //關閉后返回主Activity Activityb.this.finish(); } }); } } package com.example.testactivityresquest; public class Changliang { public static final String KEY="key"; public static final String Activity_b_KEY="key1"; public static final int requestCode=1987; }
xml文件:
<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:background="#ff" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="dp" android:text="啟動Activityb" /> </RelativeLayout> <?xml version="." encoding="utf-"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ff" android:orientation="vertical" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="返回Activity" /> </LinearLayout>
別忘在AndroidManifast中注冊activityb。
運行效果圖:
startActivityForResult與startActivity的不同之處在于:
1、startActivity( )
僅僅是跳轉到目標頁面,若是想跳回當前頁面,則必須再使用一次startActivity( )。
2、startActivityForResult( )
可以一次性完成這項任務,當程序執(zhí)行到這段代碼的時候,假若從T1Activity跳轉到下一個Text2Activity,而當這個Text2Activity調用了finish()方法以后,程序會自動跳轉回T1Activity,并調用前一個T1Activity中的onActivityResult( )方法。
相關文章
Android開發(fā)實現控件雙擊事件的監(jiān)聽接口封裝類
這篇文章主要介紹了Android開發(fā)實現控件雙擊事件的監(jiān)聽接口封裝類,需要的朋友可以參考下2020-03-03Android在OnCreate中獲取控件的寬度和高度的實現代碼
在Android中,有時需要對控件進行測量,得到的控件寬度和高度可以用來做一些計算。在需要自適應屏幕的情況下,這種計算就顯得特別重要2012-11-11