日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓活动间的传值问题

發布時間:2024/1/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓活动间的传值问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、向下一個活動傳遞數據

???? Intent中提供了一系列的putExtra()方法的重載,可以把我們想要傳的數據暫存在Intent中,啟動一個活動后,只需把這些數據在從Intent中,取出來即可。做一個簡單的Demo演示一下:

新建項目MyDataTrans,同時在項目中新建類Second.java和布局second.xml。

在activity_main.xml中修改布局(TextView用于獲取從上一活動或許的值):

<LinearLayout android:id="@+id/lin1"android:layout_width="fill_parent"android:layout_height="wrap_content"><Button android:id="@+id/btn"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Click On"/></LinearLayout><LinearLayoutandroid:id="@+id/line2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_below="@id/lin1" ><TextView android:id="@+id/textView1"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout> activity_main.xml

在second.xml中修改布局(TextView用于獲取從上一活動或許的值):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView android:id="@+id/textView2"android:layout_width="match_parent"android:layout_height="wrap_content"/><Button android:id="@+id/btn2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Back"/> </LinearLayout> second.xml

在MainActivity.java中添加按鈕1的單擊事件,跳轉到活動2中,

btn1=(Button)findViewById(R.id.btn); btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent1=new Intent(MainActivity.this,Second.class);intent1.putExtra("mydata", "你好,我來自界面1。。。。");startActivity(intent1);}}); setOnClickListener()

這里我們用顯示Intent的方式啟動Second,并通過putExtra()方法傳遞一個字符串。其中putExtra()接受兩個參數,第一個參數是鍵,用于后面從Intent中取值,第二個參數就是要傳遞的值。
接著進入到Second.java中,在這里我們的目的就是要把上一個頁面傳的值進行取出顯示,onCreat()方法中添加如下代碼:

protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.second);btn2=(Button)findViewById(R.id.btn2);textView2=(TextView)findViewById(R.id.textView2);//獲取上一個活動傳出的值Intent intent=getIntent();textView2.setText(intent.getStringExtra("mydata")); } onCreat()

通過getIntent()方法獲取用于啟動的Second的Intent,然后調用getStringExtra()方法,獲取相應的鍵值,就可以得到傳遞的數據了。然后把傳遞的數據在TextView上顯示出來。

2、返回數據給上一個活動

方法其實和上面的類似,在MainActivity.java中 依舊是點擊Button控件跳轉到Second頁面,

Intent intent1=new Intent(MainActivity.this,Second.class);?? startActivityForResult(intent1, 1);

這里我們用startActivityForResult()方法來啟動Second,startActivityForResult()方法接受兩個參數,第一個參數是Intent,第二個參數是請求碼,用于在回調中判斷數據的來源。其中,請求碼只要是唯一值就可以了。

在Second中給按鈕注冊點擊事件,并添加返回數據的邏輯:

btn2=(Button)findViewById(R.id.btn2); btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intentback=new Intent();intentback.putExtra("data_back", "界面1,你好!!!");setResult(RESULT_OK, intentback);finish();}}); View Code

這里構建Intent僅僅用于傳遞數據而已,沒有任何指定的意圖。緊接著要傳遞的數據放在intentback中,然后調用setResult()方法,用于向上一個活動返回數據。setResult()方法接受兩個參數,第一個參數用于向上一個活動返回處理結果,一般只有RESULT_OK或者RESULT_CANCELED這兩個值,第二個參數則是把帶有數據的intentback傳遞回去,然后調用finish()方法來銷毀當前活動(必須銷毀,否則無法回調)。

由于使用startActivityForResult()方法啟動的Second,所以在被銷毀之后會回調到上一個活動的onActivityResult()方法,因此需要在MainActivity.java中重新寫這個方法來得到返回的數據,如下所示:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);textView1=(TextView)findViewById(R.id.textView1);super.onActivityResult(requestCode, resultCode, data);switch(requestCode){case 1:if(resultCode==RESULT_OK){textView1.setText(data.getStringExtra("data_back")+"我來自界面2!!!");}break;default:}} onActivityResult()

onActivityResult()有三個參數,第一個參數requestCode,即我們在啟動活動時傳入的請求碼,第二個參數resultCode,即我們在返回出具時傳入的處理結果,第三個參數data即我們帶有返回數據的Intent(這里指intentback)。

由于一個活動中有可能調用startActivityForResult()方法去啟動很多不同的活動,但是每一個活動返回的數據都會調到onActivityResult()中,所以首先要做的就是根據requestCode,即請求碼來檢查判斷數據源。然后再根據resultCode的值來判斷處理結果是否成功。最后有打他來傳入返回的數據。

答疑:當用戶不是通過按鈕的單擊事件返回,而通過back鍵返回時是不是就沒法獲取想要返回的數據了呢?

這時候只需我們調用一個叫做onBackPressed()的方法來解決這個問題。代碼如下:

public void onBackPressed() {Intent intentback=new Intent();intentback.putExtra("data_back", "界面1,你好!!!");setResult(RESULT_OK, intentback);finish();} onBackPressed()

其實,我們可以 單獨寫一個返回數據的方法,然后在按鈕注冊點擊事件或者onBackPressed()時直接調用就好。

轉載于:https://www.cnblogs.com/wynet/p/5493654.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的安卓活动间的传值问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。