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

您的位置:首頁技術文章
文章詳情頁

Android利用startActivityForResult返回數據到前一個Activity

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

在Android里面,從一個Activity跳轉到另一個Activity、再返回,前一個Activity默認是能夠保存數據和狀態的。但這次我想通過利用startActivityForResult達到相同的目的,雖然看起來變復雜了,但可以探索下startActivityForResult背后的原理和使用注意事項。

要實現的功能如下:

從Activity A將數據傳到Activity B,再從Activity B中獲取數據后,再傳回Activity A。在Activity B中添加一個“回到上一頁”的Button,返回到Activity A之后,需要保留之前輸入的相關信息,我們用startActivityForResult來拉起Activity B,這樣,Activity A就會有一個等待Activity B的返回。

具體步驟如下: 在Activity A中有一個Button,點擊Button后,獲取要傳到Activity B的數據,將數據封裝到Bundle中,再調用startActivityForResult將數據傳到Activity B Activity A 重寫onActivityResult函數,判斷requestCode和resultCode是否是我們預期的結果,如果是,那么從Bundle中獲取數據,重新顯示在Activity A中 在Activity B中獲取Activity A傳過去的Intent對象,并取出Bundle對象,再從Bundle中取出數據字段,顯示在當前頁面 Activity B中也有一個Button,點擊Button后,調用setResult傳回結果,并關閉當前頁面。因此,看起來的效果就是回到了Activity A 源碼如下:

1、Activity A的實現:

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); // 將數據傳入第二個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='計算標準體重' 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='計算' 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的實現:

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中的數據 double height = mBundle.getDouble('height'); String gender = mBundle.getString('gender'); // 判斷性別 String genderText = ''; if (gender.equals('M')) { genderText = '男性'; } else { genderText = '女性'; } // 獲取標準體重 String weight = getWeight(gender, height); // 設置需要顯示的文字內容 TextView textView = findViewById(R.id.textView2); textView.setText('你是一位' + genderText + 'n你的身高是' + height + '厘米n你的標準體重是' + weight + '公斤'); Button button = findViewById(R.id.buttonGoBack); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 設置結果,并關閉頁面 setResult(RESULT_OK, mIntent); finish(); } }); } // 四舍五入格式化 private String format(double num) { NumberFormat formatter = new DecimalFormat('0.00'); return formatter.format(num); } // 計算標準體重的方法 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='回到上一頁' android:layout_alignStart='@id/textView2' android:layout_below='@id/textView2' android:layout_marginTop='54dp' android:layout_marginStart='52dp'/></RelativeLayout>不過這里有3個地方需要注意:

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

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

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

(1)PackageInstaller下面的InstallFailed.java(安裝apk失敗的相關頁面)

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的相關頁面):在onCreate方法里面有多處設置為RESULT_FIRST_USER。因此,我的理解是業務自身在一些錯誤或無效的場景下使用,由業務自己定義。

3. 如果啟動Activity B時設置了new_task啟動模式,進入Activity B后,Activity A會立即回調onActivityResult,而且resultCode是0;從Activity B setResult返回后,不再有onActivityResult的回調!

以上就是Android利用startActivityForResult返回數據到前一個Activity的詳細內容,更多關于Android 返回數據到前一個Activity的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日一区二区三区在线观看国产免 | 国产精品欧美在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品丝袜xxxxxxx| 国产精品色网| 一区二区三区国产盗摄| 欧美精品一线| 日本特黄久久久高潮| 日韩激情综合| 日韩欧美自拍| 一本一道久久a久久| 久久久久伊人| 欧美在线亚洲| 亚洲一区日本| 欧美亚洲网站| 国产a亚洲精品| 99久久亚洲精品蜜臀| 宅男噜噜噜66国产日韩在线观看| 美日韩精品视频| 日韩av中文字幕一区二区| 国产精品一区二区三区美女 | 免费国产亚洲视频| 视频一区日韩精品| 国产图片一区| 欧美少妇精品| 丝袜诱惑制服诱惑色一区在线观看| 深夜福利一区| 国内揄拍国内精品久久| 激情久久五月| 日韩不卡一区二区| 亚洲女同av| 亚洲在线网站| 国产精品激情电影| 日韩免费看片| 亚洲乱码久久| 成年男女免费视频网站不卡| 亚洲免费在线| 伊人网在线播放| 欧美午夜精彩| 久久男人av| 深夜福利一区| 午夜久久美女| 日韩中文欧美| 免费一级欧美在线观看视频 | 91精品国产一区二区在线观看| 蜜桃视频在线网站| 国产日韩中文在线中文字幕 | 99久久视频| 视频国产精品| 欧洲一级精品| 91大神在线观看线路一区| 日韩电影在线视频| 日韩国产在线一| 99久久精品网站| 欧美片第1页综合| 久久男女视频| 国产精品片aa在线观看| 亚洲天堂久久| 久久99久久人婷婷精品综合| 欧美日韩四区| 精品中文在线| 一区二区91| 99久久久久| 精品一区二区三区亚洲| 在线精品亚洲| 欧美日韩在线网站| 精品国产乱码久久久久久樱花 | 福利一区视频| 日韩一区二区三区四区五区| 久久久夜夜夜| 国产极品模特精品一二| 首页国产欧美久久| 成人免费电影网址| 国产精品激情电影| 综合干狼人综合首页| 久久久777| 麻豆国产欧美一区二区三区 | 国产精品毛片aⅴ一区二区三区| 午夜欧美精品久久久久久久| 国产一区二区三区网| 午夜久久av| 亚洲电影在线一区二区三区| 成人国产精选| 国产精一区二区| 亚洲开心激情| 麻豆9191精品国产| 亚洲福利免费| 最近高清中文在线字幕在线观看1| 国产亚洲欧美日韩精品一区二区三区| 99国产精品久久久久久久成人热 | 亚洲影视一区| 99亚洲精品| 久久精品国产大片免费观看| 精品国产一区二区三区噜噜噜| 日韩精品a在线观看91| 亚洲综合电影一区二区三区| 久久久久免费av| 都市激情国产精品| 免费亚洲一区| 国产精品qvod| 国产欧美高清| 国产一精品一av一免费爽爽| 日韩精品中文字幕一区二区| 男女男精品网站| 99成人在线| 黄色日韩精品| 狠狠干成人综合网| 伊人精品视频| 国产韩日影视精品| 欧美1区2区3区| 久久亚洲精品中文字幕蜜潮电影| 久草免费在线视频| 欧美日韩视频网站| 久久久精品网| 蜜桃视频欧美| 激情综合网站| 欧美精品一线| 首页国产欧美久久| 蜜芽一区二区三区| 亚洲区欧美区| 日韩亚洲精品在线观看| 日本不卡不码高清免费观看 | 国产欧美一区二区三区精品观看| 涩涩涩久久久成人精品| 日本一区二区中文字幕| 日韩avvvv在线播放| 日韩av一区二区在线影视| 日韩avvvv在线播放| 欧美日韩亚洲一区三区| 国产精品调教| 精品三级av| 丝袜美腿诱惑一区二区三区| 99精品在线免费在线观看| 精品在线播放| 丝袜美腿亚洲色图| 日韩不卡在线观看日韩不卡视频 | 麻豆成全视频免费观看在线看| 日韩欧美国产精品综合嫩v| 久久亚洲成人| 日韩精品一二三区| 欧美偷窥清纯综合图区| 国产精品大片| av日韩中文| 欧洲激情综合| 蜜臀久久久久久久| 国产色噜噜噜91在线精品| 精品久久视频| 精品一区三区| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 久久国产生活片100| 国产精品1luya在线播放| 国产粉嫩在线观看| 欧美日韩视频一区二区三区| 亚洲三区欧美一区国产二区| 国产美女久久| 四虎4545www国产精品 | 国产精久久久| 久久久精品五月天| 视频一区二区欧美| 国产欧美自拍| 日韩免费福利视频| 美女精品在线观看| 欧美激情麻豆| 久久国产亚洲| 亚洲狼人精品一区二区三区| 鲁大师精品99久久久| 激情欧美一区二区三区| 奇米亚洲欧美| 国产精品黑丝在线播放| 女同性一区二区三区人了人一| 天堂精品久久久久| 中文字幕在线视频网站| 蜜臀久久99精品久久久久宅男| 国产精品宾馆| 国产综合精品一区| 国产亚洲一卡2卡3卡4卡新区| 日韩精品麻豆| 日本免费一区二区视频| 亚洲www免费| 日本中文字幕一区二区视频| 成人日韩在线观看| 清纯唯美亚洲综合一区| 91精品精品| 欧美日韩午夜| 久久久久久美女精品| 国产欧美成人| 国产一区成人| 成人免费一区| 亚洲精品一区二区在线播放∴| 91亚洲一区| 日韩精品免费观看视频| 久久久9色精品国产一区二区三区| 奇米狠狠一区二区三区| 欧美aa国产视频| 精品三级av在线导航| 亚洲ab电影| 欧美+亚洲+精品+三区| 久久不见久久见免费视频7| 亚洲精品91| 精品国产乱码久久久|