日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android利用startActivityForResult返回?cái)?shù)據(jù)到前一個(gè)Activity

瀏覽:22日期:2022-09-21 09:17:31

在Android里面,從一個(gè)Activity跳轉(zhuǎn)到另一個(gè)Activity、再返回,前一個(gè)Activity默認(rèn)是能夠保存數(shù)據(jù)和狀態(tài)的。但這次我想通過(guò)利用startActivityForResult達(dá)到相同的目的,雖然看起來(lái)變復(fù)雜了,但可以探索下startActivityForResult背后的原理和使用注意事項(xiàng)。

要實(shí)現(xiàn)的功能如下:

從Activity A將數(shù)據(jù)傳到Activity B,再?gòu)腁ctivity B中獲取數(shù)據(jù)后,再傳回Activity A。在Activity B中添加一個(gè)“回到上一頁(yè)”的Button,返回到Activity A之后,需要保留之前輸入的相關(guān)信息,我們用startActivityForResult來(lái)拉起Activity B,這樣,Activity A就會(huì)有一個(gè)等待Activity B的返回。

具體步驟如下: 在Activity A中有一個(gè)Button,點(diǎn)擊Button后,獲取要傳到Activity B的數(shù)據(jù),將數(shù)據(jù)封裝到Bundle中,再調(diào)用startActivityForResult將數(shù)據(jù)傳到Activity B Activity A 重寫(xiě)onActivityResult函數(shù),判斷requestCode和resultCode是否是我們預(yù)期的結(jié)果,如果是,那么從Bundle中獲取數(shù)據(jù),重新顯示在Activity A中 在Activity B中獲取Activity A傳過(guò)去的Intent對(duì)象,并取出Bundle對(duì)象,再?gòu)腂undle中取出數(shù)據(jù)字段,顯示在當(dāng)前頁(yè)面 Activity B中也有一個(gè)Button,點(diǎn)擊Button后,調(diào)用setResult傳回結(jié)果,并關(guān)閉當(dāng)前頁(yè)面。因此,看起來(lái)的效果就是回到了Activity A 源碼如下:

1、Activity A的實(shí)現(xiàn):

public class ExampleActivity extends Activity { private EditText mEditText; private RadioButton mRb1; private RadioButton mRb2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_page_layout); Button button = findViewById(R.id.buttonGoToLayout2); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mEditText = findViewById(R.id.editText); // 獲取輸入的身高 double height = Double.parseDouble(mEditText.getText().toString()); // 獲取性別 String gender = ''; mRb1 = findViewById(R.id.radioButtonMale); mRb2 = findViewById(R.id.radioButtonFemale); if (mRb1.isChecked()) { gender = 'M'; } else { gender = 'F'; } Intent intent = new Intent(ExampleActivity.this, SecondActivity.class); // 將數(shù)據(jù)傳入第二個(gè)Activity Bundle bundle = new Bundle(); bundle.putDouble('height', height); bundle.putString('gender', gender); intent.putExtras(bundle); startActivityForResult(intent, 0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == 0) { Bundle bundle = data.getExtras(); double height = bundle.getDouble('height'); String gender = bundle.getString('gender'); mEditText.setText('' + height); if (gender.equals('M')) { mRb1.setChecked(true); } else { mRb2.setChecked(true); } } }}

2、布局文件main_page_layout.xml:

<RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='match_parent' android:layout_gravity='center'> <TextView android: android:layout_width='match_parent' android:layout_height='wrap_content' android:text='計(jì)算標(biāo)準(zhǔn)體重' android:paddingTop='20dp' android:paddingLeft='20dp' android:textSize='30sp'/> <TextView android:text='性別:' android:layout_width='wrap_content' android:layout_height='wrap_content' android: android:layout_alignStart='@id/textView1' android:layout_marginTop='38dp' android:layout_below='@id/textView1' android:layout_marginStart='46dp'/> <TextView android:text='身高:' android:layout_width='wrap_content' android:layout_height='wrap_content' android: android:layout_alignStart='@id/textView1' android:layout_marginStart='46dp' android:layout_below='@id/textView3' android:layout_marginTop='29dp'/> <EditText android:layout_width='wrap_content' android:layout_height='wrap_content' android: android:layout_toEndOf='@id/textView4' android:layout_marginStart='36dp' android:autofillHints='@string/app_name' android:hint='0' android:layout_alignBaseline='@id/textView4'/> <TextView android:layout_width='wrap_content' android:layout_height='wrap_content' android:text='厘米' android:layout_alignBaseline='@id/editText' android:layout_toRightOf='@id/editText' android:layout_marginStart='10dp' /> <RadioButton android:layout_below='@id/textView1' android: android:text='男' android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_alignStart='@id/textView1' android:layout_marginTop='30dp' android:layout_marginStart='113dp'/> <RadioButton android: android:text='女' android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_below='@id/textView1' android:layout_toEndOf='@id/radioButtonMale' android:layout_marginLeft='15dp' android:layout_marginTop='30dp' android:layout_marginStart='49dp'/> <Button android:text='計(jì)算' android:layout_width='wrap_content' android:layout_height='wrap_content' android: android:layout_marginTop='90dp' android:layout_below='@id/radioButtonMale' android:layout_alignStart='@id/textView1' android:layout_marginStart='92dp'/></RelativeLayout>

3、Activity B的實(shí)現(xiàn):

public class SecondActivity extends Activity { private Intent mIntent; private Bundle mBundle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); mIntent = getIntent(); mBundle = mIntent.getExtras(); // 記得判空 if (mBundle == null) { return; } // 獲取Bundle中的數(shù)據(jù) double height = mBundle.getDouble('height'); String gender = mBundle.getString('gender'); // 判斷性別 String genderText = ''; if (gender.equals('M')) { genderText = '男性'; } else { genderText = '女性'; } // 獲取標(biāo)準(zhǔn)體重 String weight = getWeight(gender, height); // 設(shè)置需要顯示的文字內(nèi)容 TextView textView = findViewById(R.id.textView2); textView.setText('你是一位' + genderText + 'n你的身高是' + height + '厘米n你的標(biāo)準(zhǔn)體重是' + weight + '公斤'); Button button = findViewById(R.id.buttonGoBack); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 設(shè)置結(jié)果,并關(guān)閉頁(yè)面 setResult(RESULT_OK, mIntent); finish(); } }); } // 四舍五入格式化 private String format(double num) { NumberFormat formatter = new DecimalFormat('0.00'); return formatter.format(num); } // 計(jì)算標(biāo)準(zhǔn)體重的方法 private String getWeight(String gender, double height) { String weight = ''; if (gender.equals('M')) { weight = format((height - 80) * 0.7); } else { weight = format((height - 70) * 0.6); } return weight; }}

4、Activity B的布局:

<RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='match_parent'> <TextView android:text='This is the second layout' android:layout_width='wrap_content' android:layout_height='wrap_content' android: android:paddingTop='30dp' android:paddingStart='50dp'/> <Button android:layout_width='wrap_content' android:layout_height='wrap_content' android: android:text='回到上一頁(yè)' android:layout_alignStart='@id/textView2' android:layout_below='@id/textView2' android:layout_marginTop='54dp' android:layout_marginStart='52dp'/></RelativeLayout>不過(guò)這里有3個(gè)地方需要注意:

1.startActivityForResult的第二個(gè)參數(shù)requestCode傳的是0,那么我們分別看下傳遞的值小于0和大于0是什么結(jié)果:(1)傳一個(gè)小于0的值,比如-1:等同于調(diào)用 startActivity,onActivityResult不會(huì)被調(diào)用(2)傳一個(gè)大于0的值,比如1:效果等同于傳0,onActivityResult的第一個(gè)參數(shù)正是我們通過(guò)startActivityForResult傳遞的requestCode

2.onActivityResult的第二個(gè)參數(shù)resultCode:它是第二個(gè)activity通過(guò)setResult返回的,常用的取值有2個(gè):RESULT_CANCELED、RESULT_OK(1)RESULT_CANCELED:Activity B拉起失敗,比如crash(2)RESULT_OK:Activity B操作成功后的返回值

還有一個(gè)不太常用的取值:RESULT_FIRST_USER,Android源碼對(duì)這個(gè)取值的定義是“user-defined activity results”(用戶自定義的),我在源碼中全局搜索了下,用的地方不多,挑了一兩個(gè)使用的地方:

(1)PackageInstaller下面的InstallFailed.java(安裝apk失敗的相關(guān)頁(yè)面)

protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); int statusCode = getIntent().getIntExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE); if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) { // …….. setResult(Activity.RESULT_FIRST_USER, result); finish(); }

(2)PackageInstaller下面的InstallStaging.java

private void showError() { (new ErrorDialog()).showAllowingStateLoss(getFragmentManager(), 'error'); // ……. setResult(RESULT_FIRST_USER, result);}

PackageInstaller下面的UninstallerActivity.java(卸載apk的相關(guān)頁(yè)面):在onCreate方法里面有多處設(shè)置為RESULT_FIRST_USER。因此,我的理解是業(yè)務(wù)自身在一些錯(cuò)誤或無(wú)效的場(chǎng)景下使用,由業(yè)務(wù)自己定義。

3. 如果啟動(dòng)Activity B時(shí)設(shè)置了new_task啟動(dòng)模式,進(jìn)入Activity B后,Activity A會(huì)立即回調(diào)onActivityResult,而且resultCode是0;從Activity B setResult返回后,不再有onActivityResult的回調(diào)!

以上就是Android利用startActivityForResult返回?cái)?shù)據(jù)到前一個(gè)Activity的詳細(xì)內(nèi)容,更多關(guān)于Android 返回?cái)?shù)據(jù)到前一個(gè)Activity的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产电影| 精品免费av| 美女av在线免费看| 美女视频免费精品| 国产欧美一区二区三区精品观看 | 国产精品夜夜夜| 日韩精品高清不卡| 奇米色欧美一区二区三区| 亚洲精品免费观看| 久久青草久久| 尤物在线精品| 日精品一区二区三区| 91麻豆精品激情在线观看最新| 日韩有码av| 免费不卡在线视频| 亚洲精品女人| 麻豆精品视频在线| 91青青国产在线观看精品| 国际精品欧美精品| 一本大道色婷婷在线| 99精品一区| 亚洲一区有码| 成人亚洲精品| 亚洲在线电影| 丝袜美腿一区二区三区| 亚洲精品伊人| 国产va免费精品观看精品视频| av资源中文在线| 欧美91精品| 欧美日韩va| 999久久久91| 麻豆9191精品国产| 国产视频网站一区二区三区| 日韩精品欧美成人高清一区二区| 国产精品久久久免费| 免费一级欧美片在线观看网站 | 国产另类在线| 国产精品大片免费观看| 视频小说一区二区| 亚洲青青久久| 五月天久久久| 精品91福利视频| 日韩在线电影| 久久国产精品99国产| 黄色在线观看www| 日本麻豆一区二区三区视频| 久久久久中文| 国产不卡精品在线| 国产亚洲欧洲| 国产欧洲在线| 麻豆国产精品| 国产高潮在线| 黑人精品一区| 美女视频黄 久久| 2023国产精品久久久精品双| 亚洲精品精选| 97精品国产福利一区二区三区| 婷婷亚洲五月色综合| 视频在线不卡免费观看| 日韩中文字幕一区二区高清99| 久久伦理在线| 99成人在线视频| 成人久久一区| 91九色精品| 亚洲在线国产日韩欧美| 亚洲美洲欧洲综合国产一区| 国产综合激情| 欧美中文一区二区| 日韩av福利| 九九综合九九| 99在线精品免费视频九九视| 亚洲精品2区| 亚洲三级网址| 欧美日韩18| 日韩成人精品一区二区| 黄毛片在线观看| 欧美日韩国产免费观看| 亚洲在线国产日韩欧美| 只有精品亚洲| 视频一区中文字幕国产| 日韩av一级片| 麻豆91小视频| 首页国产精品| 视频在线观看一区二区三区| 最新亚洲国产| 久久中文欧美| 福利一区二区三区视频在线观看| 精品国产欧美日韩| 99久久久久国产精品| 午夜精品福利影院| 日韩福利视频导航| 亚洲精品成人图区| 国产一区91| 国产午夜精品一区在线观看| 国产在线日韩精品| 免费看的黄色欧美网站| 欧美欧美黄在线二区| 91精品国产自产精品男人的天堂| 精品一区二区三区在线观看视频| 欧美a级片一区| 亚州av乱码久久精品蜜桃| 精品国产一区二| 国产精品毛片久久久| 蜜臀精品一区二区三区在线观看 | av成人国产| 国产在线一区不卡| 亚洲精品欧洲| 欧美91精品| 成人在线视频中文字幕| 欧美在线亚洲综合一区| 久久免费视频66| 91久久久久| 中文字幕在线免费观看视频| 日韩国产欧美一区二区| 中文字幕日韩亚洲| 自由日本语亚洲人高潮| 国产在线日韩精品| 国产精品一卡| 亚洲精品在线国产| 9国产精品视频| 久久三级福利| 狠狠久久伊人| 国产丝袜一区| 免费看日韩精品| 激情欧美一区二区三区| 久久精品国产99国产| 视频一区欧美日韩| 久久视频精品| 精品国产亚洲一区二区在线观看| 99综合视频| 伊人精品视频| 久久蜜桃av| 亚洲成人国产| 免费视频一区三区| 欧美精品日日操| 成人日韩av| 国产精品福利在线观看播放| 国产亚洲欧美日韩精品一区二区三区| 在线看片日韩| 国产精品尤物| 亚洲综合福利| 在线亚洲精品| 亚洲一级网站| 不卡视频在线| 伊人久久婷婷| 日韩在线成人| 日韩国产在线观看一区| 亚洲精品极品| 7m精品国产导航在线| 蜜桃视频一区二区三区| 亚洲精品少妇| 麻豆精品在线播放| 日韩免费av| 久久国产精品毛片| 日韩国产高清在线| 国产精品久久久久久av公交车| 在线观看免费一区二区| 综合激情五月婷婷| 日韩专区在线视频| 欧美一区二区三区久久精品| 国产欧美一区二区三区精品观看| 岛国精品一区| 国产女优一区| 久久久精品国产**网站| 日本美女一区| 亚洲五月综合| 精品视频高潮| 在线看片日韩| 欧美一区久久久| 日韩影片在线观看| 性欧美videohd高精| 欧美在线网站| а√天堂中文在线资源8| 欧美在线综合| 在线一区av| 日本天堂一区| 黄色欧美日韩| 91精品亚洲| 日产精品一区二区| 日韩av字幕| 久久亚洲一区| 极品日韩av| 日韩三区在线| 久久av中文| 蜜桃91丨九色丨蝌蚪91桃色| 88xx成人免费观看视频库| 日韩精品一区二区三区av | 国产精品麻豆成人av电影艾秋| 亚洲第一区色| 精品不卡一区| 久久狠狠久久| 日韩高清不卡在线| 亚洲精品大片| 另类国产ts人妖高潮视频| 成人看片网站| 蜜桃成人精品| 成人台湾亚洲精品一区二区| 久久久久久久久成人| 日韩av中文字幕一区二区三区| 久久人人88|