2022-10-17学习内容
1.向下一个Activity发送数据
1.1activity_act_send.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_send" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="今天天气真不错"/> <Button android:id="@+id/btn_send" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="发送以上文字"/> </LinearLayout>
1.2ActSendActivty.java
package com.example.chapter04; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView; import com.example.chapter04.utils.DateUtil; public class ActSendActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv_send; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_act_send); tv_send = findViewById(R.id.tv_send); findViewById(R.id.btn_send).setOnClickListener(this); } @Override public void onClick(View v) { Intent intent = new Intent(this, ActReceiveActivity.class); Bundle bundle = new Bundle(); bundle.putString("request_time", DateUtil.getNowTime()); bundle.putString("request_content", tv_send.getText().toString()); intent.putExtras(bundle); startActivity(intent); } }
1.3ActReceiveActivity.java
package com.example.chapter04; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class ActReceiveActivity extends AppCompatActivity { private TextView tv_receive; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_act_receive); tv_receive = findViewById(R.id.tv_receive); // 从上一个页面传来的意图中获取快递包裹 Bundle bundle = getIntent().getExtras(); String request_time = bundle.getString("request_time"); String request_content = bundle.getString("request_content"); String desc = String.format("收到请求消息:\n请求时间为%s\n请求内容为%s", request_time, request_content); tv_receive.setText(desc); } }
1.4效果:
2.向上一个Activity返回数据
2.1activity_act_request.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_request" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_request" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="传送请求数据"/> <TextView android:id="@+id/tv_response" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
2.2ActRequestActivity.java
package com.example.chapter04; import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView; import com.example.chapter04.utils.DateUtil; public class ActRequestActivity extends AppCompatActivity implements View.OnClickListener { private static final String mRequest = "你吃了吗?吃饭去吧"; private ActivityResultLauncher<Intent> register; private TextView tv_response; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_act_request); TextView tv_request = findViewById(R.id.tv_request); tv_request.setText("待发送的消息为:" + mRequest); tv_response = findViewById(R.id.tv_response); findViewById(R.id.btn_request).setOnClickListener(this); register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { if (result != null) { Intent intent = result.getData(); if (intent != null && result.getResultCode() == Activity.RESULT_OK) { Bundle bundle = intent.getExtras(); String response_time = bundle.getString("response_time"); String response_content = bundle.getString("response_content"); String desc = String.format("收到返回消息:\n应答时间为%s\n应答内容为%s", response_time, response_content); // 把返回信息的详情显示在文本视图上 tv_response.setText(desc); } } }); } @Override public void onClick(View v) { Intent intent = new Intent(this, ActResponseActivity.class); // 创建一个包裹 Bundle bundle = new Bundle(); bundle.putString("request_time", DateUtil.getNowTime()); bundle.putString("request_content", mRequest); intent.putExtras(bundle); register.launch(intent); } }
2.3activity_act_response.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_request" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_response" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="返回应答数据"/> <TextView android:id="@+id/tv_response" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
2.4ActResponseActivity.java
package com.example.chapter04; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView; import com.example.chapter04.utils.DateUtil; public class ActResponseActivity extends AppCompatActivity implements View.OnClickListener { private static final String mResponse = "我还没吃饭,那我们一起吃饭去吧。"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_act_response); TextView tv_request = findViewById(R.id.tv_request); // 从上一个页面传来的意图中获取快递包裹 Bundle bundle = getIntent().getExtras(); String request_time = bundle.getString("request_time"); String request_content = bundle.getString("request_content"); String desc = String.format("收到请求消息:\n请求时间为%s\n请求内容为%s", request_time, request_content); // 把请求信息的详情显示在文本视图上 tv_request.setText(desc); findViewById(R.id.btn_response).setOnClickListener(this); TextView tv_response = findViewById(R.id.tv_response); tv_response.setText("待返回的消息为:" + mResponse); } @Override public void onClick(View v) { Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("response_time", DateUtil.getNowTime()); bundle.putString("response_content", mResponse); intent.putExtras(bundle); // 携带意图返回上一个页面,RESULT_OK表示处理成功 setResult(Activity.RESULT_OK, intent); // 结束当前的活动页面 finish(); } }
2.5效果: