diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index c2821a1..dadedbf 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -13,17 +13,6 @@ - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index cdbc250..02c4aa5 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ + - + diff --git a/app/src/main/java/com/yanzitong/activitytest6117/FirstActivity.java b/app/src/main/java/com/yanzitong/activitytest6117/FirstActivity.java index c309812..063f715 100644 --- a/app/src/main/java/com/yanzitong/activitytest6117/FirstActivity.java +++ b/app/src/main/java/com/yanzitong/activitytest6117/FirstActivity.java @@ -11,6 +11,10 @@ import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -20,6 +24,9 @@ import androidx.appcompat.widget.PopupMenu; public class FirstActivity extends AppCompatActivity { private static final String TAG = "FirstActivity"; + // step1: 定义contract启动器类对象,初始化放在Activity生命周期的初始阶段 + ActivityResultLauncher mActivityResultLauncher; + // 先声明(变量命名:小驼峰)再使用 // 全局(成员)变量:m开头 Button mFirstBtn1; @@ -41,11 +48,27 @@ public class FirstActivity extends AppCompatActivity { setContentView(R.layout.first_layout); Log.d(TAG, "onCreate: 活动创建成功"); // 组合键2:alter + enter + // step2: 初始化启动器类对象 + mActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), + new ActivityResultCallback() { // 触发要求:SecondActivity销毁 + @Override + public void onActivityResult(ActivityResult o) { + if (o.getResultCode() == RESULT_OK && o.getData() != null) { + Intent intent = o.getData(); + String msgBackFromSecond = intent.getStringExtra("second_backto_first"); + Log.d(TAG, "收到Second反馈的数据:" + msgBackFromSecond); + } + } + }); + // step3: 适当的时候启动启动器类 + mFirstBtn4 = findViewById(R.id.first_btn4); mFirstBtn4.setOnClickListener(v -> { // Activity之间的跳转——显式Intent Intent intent = new Intent(FirstActivity.this, SecondActivity.class); - startActivity(intent); + intent.putExtra("first_to_second", "Hello, second! I'm first! Are you OK? 6117"); + mActivityResultLauncher.launch(intent); +// startActivity(intent); }); mFirstBtn3 = findViewById(R.id.first_btn3); diff --git a/app/src/main/java/com/yanzitong/activitytest6117/SecondActivity.java b/app/src/main/java/com/yanzitong/activitytest6117/SecondActivity.java index 4995867..be48676 100644 --- a/app/src/main/java/com/yanzitong/activitytest6117/SecondActivity.java +++ b/app/src/main/java/com/yanzitong/activitytest6117/SecondActivity.java @@ -2,23 +2,81 @@ package com.yanzitong.activitytest6117; import android.content.Intent; import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; public class SecondActivity extends AppCompatActivity { + + public static final String TAG = "SecondActivity"; + TextView mSecondShowMsgTV; + + ActivityResultLauncher mLauncher; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); + + mLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), + o -> { + if (o.getResultCode() == RESULT_OK && o.getData() != null) { + Intent intent = o.getData(); + String msgBackFromThird = intent.getStringExtra("third_backto_second"); + Log.d(TAG, "Second收到Third反馈的数据:" + msgBackFromThird); + } + }); + + // 判断数据是否接受成功 + Intent intent2 = getIntent(); + String msgFromFirst = intent2.getStringExtra("first_to_second"); + mSecondShowMsgTV = findViewById(R.id.second_show_msg_tv); + Button mSecondBtn2 = findViewById(R.id.second_btn2); + mSecondBtn2.setOnClickListener(v -> { + Intent intent3 = new Intent(); + if (!TextUtils.isEmpty(msgFromFirst)) { + intent3.putExtra("second_backto_first", "Hi, first! 我收到你的消息了,谢谢,加油!"); + } else { + intent3.putExtra("second_backto_first", "Hi, first! 我没有收到你的数据,有什么事啊?"); + } + setResult(RESULT_OK, intent3); + finish(); + }); + + + if (TextUtils.isEmpty(msgFromFirst) == false) { + Log.d(TAG, "收到来自于First的数据" + msgFromFirst); + Toast.makeText(this, "收到来自于First的数据" + msgFromFirst, Toast.LENGTH_SHORT).show(); + mSecondShowMsgTV.setText(msgFromFirst); + } else { + + } + Button mSecondBtn1 = findViewById(R.id.second_btn1); mSecondBtn1.setOnClickListener(v -> { Intent intent = new Intent(SecondActivity.this, ThirdActivity.class); - startActivity(intent); + intent.putExtra("second_to_third", "Nice to meet you, Third! 我是Second! 6117"); + + mLauncher.launch(intent); + +// startActivity(intent); }); } } + +/** + * your turn: + * SecondActivity传递数据给ThirdActivity, "Nice to meet you, Third! 我是Second! 6117" + * 日志、Toast、界面显示数据 + */ + /** * your turn: * 新建UI: third_layout和Java class: thirdActivity diff --git a/app/src/main/java/com/yanzitong/activitytest6117/ThirdActivity.java b/app/src/main/java/com/yanzitong/activitytest6117/ThirdActivity.java index bf80d88..cd40a90 100644 --- a/app/src/main/java/com/yanzitong/activitytest6117/ThirdActivity.java +++ b/app/src/main/java/com/yanzitong/activitytest6117/ThirdActivity.java @@ -1,8 +1,13 @@ package com.yanzitong.activitytest6117; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; @@ -11,12 +16,26 @@ public class ThirdActivity extends AppCompatActivity { private Button mThirdBtn1; private Button mThirdBtn2; private Button mThirdBtn3; + TextView mThirdShowMsgTV; + public static final String TAG = "ThirdActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.third_layout); + mThirdShowMsgTV = findViewById(R.id.third_show_msg_tv); + + Intent intent3 = getIntent(); + String msgFromSecond = intent3.getStringExtra("second_to_third"); + if (!TextUtils.isEmpty(msgFromSecond)) { + Log.d(TAG, "收到来自于Second的数据" + msgFromSecond); + Toast.makeText(this, "收到来自于Second的数据" + msgFromSecond, Toast.LENGTH_SHORT).show(); + mThirdShowMsgTV.setText(msgFromSecond); + } else { + + } + mThirdBtn1 = findViewById(R.id.third_btn1); mThirdBtn1.setOnClickListener(v -> { // 项目内部隐式Intent:匹配action和category Intent intent = new Intent("com.yanzitong.activitytest6117.action.YZT_FIRST"); // 为FirstActivity定义对应的action @@ -27,12 +46,28 @@ public class ThirdActivity extends AppCompatActivity { mThirdBtn2 = findViewById(R.id.third_btn2); mThirdBtn3 = findViewById(R.id.third_btn3); mThirdBtn2.setOnClickListener(v -> { - Intent intent = new Intent(Intent.ACTION_VIEW); // 等价于"Intent intent = new Intent(android.intent.action.VIEW)" + // 方法二 + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse("https://www.baidu.com")); startActivity(intent); + // 方法一 + /* Uri uri = Uri.parse("https://www.baidu.com"); + * Intent intent = new Intent(Intent.ACTION_VIEW, uri); // 等价于"Intent intent = new Intent(android.intent.action.VIEW)" + * startActivity(intent); + */ }); mThirdBtn3.setOnClickListener(v -> { - Intent intent = new Intent(); - startActivity(intent); + Intent intent4 = new Intent(); + if (TextUtils.isEmpty(msgFromSecond) == false) { + intent4.putExtra("third_backto_second", "Hi, second! 我收到你的消息了,谢谢,加油!"); + } else { + intent4.putExtra("third_backto_second", "Hi, second! 我没有收到消息!你想跟我说什么?"); + } + setResult(RESULT_OK, intent4); + finish(); +// Intent intent = new Intent(Intent.ACTION_DIAL); +// intent.setData(Uri.parse("tel:10000")); +// startActivity(intent); }); } diff --git a/app/src/main/res/layout/second_layout.xml b/app/src/main/res/layout/second_layout.xml index 2056071..b835808 100644 --- a/app/src/main/res/layout/second_layout.xml +++ b/app/src/main/res/layout/second_layout.xml @@ -19,4 +19,11 @@ android:layout_height="wrap_content" android:text="跳转到ThirdActivity" android:textAllCaps="false" /> + +