返回数据给上一个活动
既然可以傳遞數據給下一個活動,那么能不能夠返回數據給上一個活動呢?答案是肯定的。不過不同的是,返回上一個活動只需要按一下Back鍵就可以了,并沒有一個用于啟動活動的Intent來傳遞數據。通過查閱文檔你會發現,Activity中還有一個startActivityForResult()方法也是用來啟動活動的,但這個方法期望在活動銷毀的時候能夠返回一個結果給上一個活動。毫無疑問,這就是我們所需要的。
startActivityForResult(方法接收兩個參數,第一個參數還是Intent,第二個參數是請求碼,用于在之后的回調中判斷數據的來源。我們還是來實戰一下,在MainActivity中有一個btn1按鈕,并設置好了點擊監聽,此時點擊btn1按鈕會跳轉到SecondActivity界面,并且還會發送一個請求碼1.
btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity.this,SecondActivity.class);startActivityForResult(intent,1);}});@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {switch (requestCode) {case 1:String value = data.getStringExtra("key");Log.e("MainActivity", value);break;default:}}activity_second.xml中:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="跳轉入MainActivity活動"android:textAllCaps="false" /></LinearLayout>SecondActivity.java中:
package com.example.administrator.activitydemo;import android.content.Intent; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView;public class SecondActivity extends AppCompatActivity {private Button btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);initializeView();//初始化UI控件}private void initializeView() {btn2 = (Button) findViewById(R.id.btn2);btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.putExtra("key", "Hello MainActivity");setResult(RESULT_OK, intent);finish();}});}}?
下面我們來分析一下
1.首先是在MainActivity中點擊btn1--------->跳轉進入SecondActivity
2.再在SecondActivity中點擊btn2-------->MainActivity
在MainActivity中發送了一個intent和請求碼1給SecondActivity
SecondActivity中使用了一個setResult()方法,第一個參數是
RESULT_OK,第二個參數是SecondActivity中新實例出來的一個intent。而這個intent中通過putExtra()方法傳遞了一個鍵值最后我們通過在MainActivity.java中重寫了一個onActivityResult()方法,然后又獲取了intent種傳遞過來的值,并且用Log打印了出來,效果圖如下:
?
?
最后,如果你希望在SecondActivity中按下Back按鈕也實現同樣的功能,可以在SecondActivity.java文件中這樣重寫一個onBackPressed()方法,這個方法是Android系統自動監聽用戶點擊Back按鈕時自動調用的函數,如果不明白什么是回調函數可以百度下喲。
@Overridepublic void onBackPressed() {Intent intent=new Intent();intent.putExtra("key","Hello MainActivity");setResult(RESULT_OK,intent);finish();}?
?
?
?
總結
以上是生活随笔為你收集整理的返回数据给上一个活动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用显式Intent向下一个活动传递数据
- 下一篇: Button控件的基本使用(初识封装、减