Activity之間進行傳值的方式以及Activity的回傳值(補充版)
阿新 • • 發佈:2019-02-13
1、使用Intent進行Activity傳值
1)使用setClass方法來制定我們要跳轉的Activity Intent intent=new Intent(this,SecondActivity.class); intent.putExtra(key,value); startActivity(intent); //或者 Intent intent=new Intent(); intent.setClass(MainActivity.this,SecondActivity.class); intent.putExtra(key,value); startActivity(intent); 2)使用setAction方法來完成跳轉Activity Intent intent = new Intent(); intent.setAction("com.example.android_intent.second"); intent.putExtra(key,value); startActivity(intent); 注意必須在mainfest.xml檔案中的SecondActivity中設定action <activity android:name="com.example.activitytest.SecondActivity" android:label="SecondActivity"> <intent-filter> <action android:name="com.example.android_intent.second"/> <category android:name="android.intent.category.DEFAULT"/>//切記是default </intent-filter> </activity>
2、使用本地儲存SharedPreferences、SQLite、Content Provider和File進行Activity傳值
3、使用回撥CallBack
4、使用EventBus
5、使用startActivityForResult()、onActivityResult()、setResult()方法進行傳遞和返回值
一、A Activity-->B Activity=======>返回值給A Activity 1)在第一個Activity中使用startActivityForResult()方法進行跳轉,使用onActivityResult()進行接收 private int REQUEST_GET_NAME=0; @Override public void onClick(View view) { // Intent intent=new Intent(); // intent.setClass(MainActivity.this,SecondActivity.class); // startActivity(intent); Intent intent=new Intent(this,SecondActivity.class); //第一個引數是Intent物件, //第二個requestCode指定我們的一個啟動標誌值,因為我們可能有多個按鈕,如果都是跳轉到同一個 //Activity物件上, //我們需要對其進行標誌,才知道是哪個Activity物件跳轉過來的。 startActivityForResult(intent,REQUEST_GET_NAME); ----------------------------------------------------------------------------------------- /** * 所有的Activity物件的返回值都是由這個方法來接收 * requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits. * @param requestCode 表示的是啟動一個Activity時傳過去的requestCode值 * @param resultCode 表示的是啟動後的Activity回傳值時的resultCode值 * @param data 表示的是啟動後的Activity回傳過來的Intent物件 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==REQUEST_GET_TIME&&resultCode==RESULT_OK){ textView.setText(data.getStringExtra("name")); } } 2)在第二個頁面中使用setResult()方法 Intent intent=new Intent(); intent.putExtra("name",""小明); setResult(RESULT_OK,intent); this.finish(); 二、A Activity頁面中多個點選事件跳轉各個Activity,並相應給A Activity返回資訊 1)、A Activity多個點選事件跳轉對應的頁面 private static final int REQUEST_GET_SEX = 1; private static final int REQUEST_GET_NAME = 2; binding.tvSecond.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, SecondActivity.class);//第二個頁面 startActivityForResult(intent, REQUEST_GET_SEX); } }); binding.tvThree.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, ThreeActivity.class);//第三個頁面 startActivityForResult(intent, REQUEST_GET_NAME); // startActivity(intent); } }); 2)接收返回值得方法 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 1: if (resultCode == 1) { Toast.makeText(context, "性別::" + data.getStringExtra("sex"), Toast.LENGTH_SHORT).show(); } break; case 2: if (resultCode == RESULT_OK) { Toast.makeText(context, "姓名::" + data.getStringExtra("name"), Toast.LENGTH_SHORT).show(); } break; } } 3)對應各個頁面的方法 binding.sex.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SecondActivity.this, MainActivity.class); intent.putExtra("sex", "男"); setResult(1, intent); finish(); } }); binding.back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ThreeActivity.this, MainActivity.class); intent.putExtra("name", "麻子"); setResult(RESULT_OK, intent);//使用系統自帶或者自定義resultCode都行 finish(); } });