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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

从Activity返回结果

發布時間:2024/4/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从Activity返回结果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.背景:

通過startActivity啟動的Activity獨立于其父Activity,并且在關閉時不會提供任何反饋。

當需要反饋時,可以啟動一個Activity作為另一個Activity的子Activity,用它向父Activity傳遞結果。子Activity只是以一種不同的方式啟動的Activity。因此,也必須像其他的Activity 一樣,在應用程序的manifest文件中注冊。

在manifest文件中注冊的任何Activity都可以作為子Activity打開,包括系統Activity或第三方的應用程序Activity。

當子Activity結束時,它會觸發父Activity(即調用它的Activity)的事件處理程序onActivityResult。

對于一個Activity為另一個Activity提供數據輸入的情況,子Activity特別適用。

2.下面來看一個例子:完成子Activity向父Activity返回數據的功能。

先來看一下效果:

1》運行開始


其布局如下:

activity_main.xml

<LinearLayout 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:orientation="vertical"tools:context="com.demo.parameterdemo.MainActivity" ><TextViewandroid:id="@+id/show_tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="在這里顯示子Activity返回的內容" /><Buttonandroid:id="@+id/startSubActivity"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="啟動子Activity" /></LinearLayout>

startActivityForResult的工作方法和startActivity相似,但是有一個重要的區別。除了傳入顯式或隱式的Intent來決定啟動哪個Activity以外,還需要傳入一個請求碼。這個值將在后面用于唯一標識返回了的子Activity。

“啟動子Activity”事件處理代碼如下:

// 啟動子Activity,并從中獲取返回信息private void startSubActivity() {Intent startIntent = new Intent(getApplicationContext(),SubActivity.class);startActivityForResult(startIntent, ACTIVITY_REQUEST_CODE);}



2》點擊“啟動子Activity”



其布局如下:

Activity_sub.xml

<LinearLayout 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:orientation="vertical"tools:context="com.demo.parameterdemo.SubActivity" ><EditTextandroid:id="@+id/subEditText"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="在這里輸入要返回的信息..." /><Buttonandroid:id="@+id/submitButton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="返回信息" /></LinearLayout>

3》輸入要返回的信息


當準備好返回時,可以在調用finish前調用SetResult,以便向父Activity返回一個結果

“返回信息”的事件處理代碼如下:

// 返回信息,執行結束會觸發Caller的onActivityResult方法private void returnResult() {Intent returnIntent = new Intent();// 通過Intent將信息返回returnIntent.putExtra(RETURN_INFO, subEditText.getText().toString());/**void android.app.Activity.setResult(int resultCode, Intent data)Parameters: resultCode: The result code to propagate back to theoriginating activity, often RESULT_CANCELED or RESULT_OK data: The data to propagate back to the originating activity.* */this.setResult(RESULT_OK, returnIntent);this.finish();}

4》點擊“返回信息”


3.實現過程

1》父Activity的代碼如下:

MainActivity.java

package com.demo.parameterdemo;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView;public class MainActivity extends Activity {// 聲明控件private TextView showTextView;private Button startSubActivityButton;// 請求碼private static final int ACTIVITY_REQUEST_CODE = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}// 初始化private void init() {// 得到相應控件的引用showTextView = (TextView) findViewById(R.id.show_tv);startSubActivityButton = (Button) findViewById(R.id.startSubActivity);// 注冊事件startSubActivityButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubstartSubActivity();}});}// 啟動子Activity,并從中獲取返回信息private void startSubActivity() {Intent startIntent = new Intent(getApplicationContext(),SubActivity.class);startActivityForResult(startIntent, ACTIVITY_REQUEST_CODE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (requestCode == ACTIVITY_REQUEST_CODE&& resultCode == Activity.RESULT_OK) {// 獲取子Activity返回的信息String info = data.getStringExtra(SubActivity.RETURN_INFO);showTextView.setText(info);}}}
2》子Activity的代碼如下:

SubActivity.java

package com.demo.parameterdemo;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText;public class SubActivity extends Activity {// 聲明控件private EditText subEditText;private Button submitButton;// 用于唯一標識要返回的信息// 應該盡量的長,最好加上所在類的全名,即:包名+類名+參數名public static final String RETURN_INFO = "com.demo.parameterdemo.SubActivity.info";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sub);init();}// 初始化private void init() {// 得到相應控件引用subEditText = (EditText) findViewById(R.id.subEditText);submitButton = (Button) findViewById(R.id.submitButton);// 注冊事件submitButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubreturnResult();}});}// 返回信息,執行結束會觸發Caller的onActivityResult方法private void returnResult() {Intent returnIntent = new Intent();// 通過Intent將信息返回returnIntent.putExtra(RETURN_INFO, subEditText.getText().toString());this.setResult(RESULT_OK, returnIntent);this.finish();}}


與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的从Activity返回结果的全部內容,希望文章能夠幫你解決所遇到的問題。

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