Android Studio基础项目-两个Activity的Intent跳转与传值,并onActivityResult回传一个/多个值,与回传消息内容。
Posted 徐为波
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio基础项目-两个Activity的Intent跳转与传值,并onActivityResult回传一个/多个值,与回传消息内容。相关的知识,希望对你有一定的参考价值。
android Studio基础项目-两个Activity的Intent跳转与传值,并onActivityResult回传一个/多个值,与回传消息内容。
内容如图:
代码接该章节:https://blog.csdn.net/xwbk12/article/details/116561412?spm=1001.2014.3001.5501
一、简单传值
第一步:在MainActivty.java
第二步:重新方法
第三步:打印回传数据值信息
MainActivty.java的代码内容:
package com.xwb.userintent;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.renderscript.RenderScript;
import android.util.Log;
import android.view.View;
import com.xwb.userintent.model.User;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
public void tiaozhuan(View v){
Intent intent = new Intent();//跳转意图
//告诉意图,想从哪个界面跳转到哪里
intent.setClass(MainActivity.this,MainActivity_sec.class);//跳转的源、目的
//发送数据,java基本数据类型有8类,不支持Map类型。设置完数据后,需要到MainActivity_sec.activity中接收数据
intent.putExtra("name","haha");
intent.putExtra("age",20);//int型数据
intent.putExtra("aihao",new String[]{"唱歌","打游戏"});
//使用Bundle,发送数据
Bundle bundle = new Bundle();//创建
bundle.putInt("score",100);//设置score值为100
bundle.putString("info","这里是Bundle传值");
intent.putExtras(bundle);//关键处,把bundle值传给intent
//传自定义数据,发送数据
User user = new User("lidada","123456",40);
intent.putExtra("user",user);
//startActivity(intent);//执行跳转
startActivityForResult(intent,100);//第1步设置回传值
}
//第2步重新方法
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i("MainActivity","onActivityResult");//打印该方法是否回传数据值信息
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
第4步:运行APP,当中必须点击返回按钮,才能看到是否回传信息
二、通过requestCode的单一值来判断执行事件
package com.xwb.userintent;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.renderscript.RenderScript;
import android.util.Log;
import android.view.View;
import com.xwb.userintent.model.User;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
public void tiaozhuan(View v){
Intent intent = new Intent();//跳转意图
//告诉意图,想从哪个界面跳转到哪里
intent.setClass(MainActivity.this,MainActivity_sec.class);//跳转的源、目的
//发送数据,java基本数据类型有8类,不支持Map类型。设置完数据后,需要到MainActivity_sec.activity中接收数据
intent.putExtra("name","haha");
intent.putExtra("age",20);//int型数据
intent.putExtra("aihao",new String[]{"唱歌","打游戏"});
//使用Bundle,发送数据
Bundle bundle = new Bundle();//创建
bundle.putInt("score",100);//设置score值为100
bundle.putString("info","这里是Bundle传值");
intent.putExtras(bundle);//关键处,把bundle值传给intent
//传自定义数据,发送数据
User user = new User("lidada","123456",40);
intent.putExtra("user",user);
//startActivity(intent);//执行跳转
startActivityForResult(intent,100);//第1步设置回传值
}
//第2步重新方法
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i("MainActivity","onActivityResult");//打印该方法是否回传数据值信息
switch (requestCode){//通过requestCode值来判断执行事件
case 100:
Log.i("MainActivity",""+requestCode+"."+resultCode);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
运行app
三、通过requestCode的多个值来判断执行事件
第一步:在xml页面增加一个返回按钮,并添加点击事件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/purple_500"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:onClick="back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"/>
<Button
android:id="@+id/sec"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个Activity的显示界面"/>
</LinearLayout>
第二步:在java代码中增加back的点击事件
package com.xwb.userintent;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import com.xwb.userintent.model.User;
import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.Arrays;
public class MainActivity_sec extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sec);
//接收MainActivity的传过来的数据值,并保存到相应值中
Intent intent = getIntent();
int age = intent.getIntExtra("age",0);//接收第一个int型数据,没有就使用默认值0
int score = intent.getIntExtra("score",0);//没有使用bundle时值为0,使用后为100,bundle接受数据
String name = intent.getStringExtra("name");
String[] aihao = intent.getStringArrayExtra("aihao");
//自定义类User.class接收数据
Serializable user = (User)intent.getSerializableExtra("user");
Log.i("MainActivity_sec",age+" 显示年龄");
Log.i("MainActivity_sec",score+" 显示分数");
Log.i("MainActivity_sec",name+" 显示姓名");
Log.i("MainActivity_sec", Arrays.toString(aihao));
Log.i("MainActivity_sec",user.toString());//打印user自定义数据
}
public void back(View v){//“返回”按钮的方法
Intent intent = new Intent();
intent.putExtra("msg","这是从MainActivity返回来的数据");
setResult(200,intent);
finish();//关闭activty,效果等同于返回按钮
}
}
第三步:运行APP
四、回传值与消息内容
package com.xwb.userintent;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.renderscript.RenderScript;
import android.util.Log;
import android.view.View;
import com.xwb.userintent.model.User;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
public void tiaozhuan(View v){
Intent intent = new Intent();//跳转意图
//告诉意图,想从哪个界面跳转到哪里
intent.setClass(MainActivity.this,MainActivity_sec.class);//跳转的源、目的
//发送数据,java基本数据类型有8类,不支持Map类型。设置完数据后,需要到MainActivity_sec.activity中接收数据
intent.putExtra("name","haha");
intent.putExtra("age",20);//int型数据
intent.putExtra("aihao",new String[]{"唱歌","打游戏"});
//使用Bundle,发送数据
Bundle bundle = new Bundle();//创建
bundle.putInt("score",100);//设置score值为100
bundle.putString("info","这里是Bundle传值");
intent.putExtras(bundle);//关键处,把bundle值传给intent
//传自定义数据,发送数据
User user = new User("lidada","123456",40);
intent.putExtra("user",user);
//startActivity(intent);//执行跳转
startActivityForResult(intent,100);//第1步设置回传值
}
//第2步重新方法
//requestCode请求码与startActivityForResult()中requestCode一致;
// resultCode结果码,由上一个页面返回的setResult()设置;
// Intent data上一个界面的返回的数据对象
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i("MainActivity","onActivityResult");//打印该方法是否回传数据值信息
switch (requestCode){//通过requestCode值来判断执行事件
case 100:
String msg = data.getStringExtra("msg");
Log.i("MainActivity",""+requestCode+"."+resultCode+"."+msg);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
运行APP
-------------------------------------------------------------------------------------------------------------------
完整代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/purple_200" tools:context=".MainActivity"> <Button android:id="@+id/main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第一个Activity会跳转的界面" android:onClick="tiaozhuan" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/purple_500" tools:context=".MainActivity" android:orientation="vertical"> <Button android:onClick="back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="返回"/> <Button android:id="@+id/sec" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第二个Activity的显示界面"/> </LinearLayout>
package com.xwb.userintent; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.renderscript.RenderScript; import android.util.Log; import android.view.View; import com.xwb.userintent.model.User; import java.util.HashMap; import java.util.Map; public class MainActivity extends AppCompatActivity { public void tiaozhuan(View v){ Intent intent = new Intent();//跳转意图 //告诉意图,想从哪个界面跳转到哪里 intent.setClass(MainActivity.this,MainActivity_sec.class);//跳转的源、目的 //发送数据,java基本数据类型有8类,不支持Map类型。设置完数据后,需要到MainActivity_sec.activity中接收数据 intent.putExtra("name","haha"); intent.putExtra("age",20);//int型数据 intent.putExtra("aihao",new String[]{"唱歌","打游戏"}); //使用Bundle,发送数据 Bundle bundle = new Bundle();//创建 bundle.putInt("score",100);//设置score值为100 bundle.putString("info","这里是Bundle传值"); intent.putExtras(bundle);//关键处,把bundle值传给intent //传自定义数据,发送数据 User user = new User("lidada","123456",40); intent.putExtra("user",user); //startActivity(intent);//执行跳转 startActivityForResult(intent,100);//第1步设置回传值 } //第2步重新方法 //requestCode请求码与startActivityForResult()中requestCode一致; // resultCode结果码,由上一个页面返回的setResult()设置; // Intent data上一个界面的返回的数据对象 @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i("MainActivity","onActivityResult");//打印该方法是否回传数据值信息 switch (requestCode){//通过requestCode值来判断执行事件 case 100: String msg = data.getStringExtra("msg"); Log.i("MainActivity",""+requestCode+"."+resultCode+"."+msg); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
package com.xwb.userintent; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import androidx.appcompat.app.AppCompatActivity; import com.xwb.userintent.model.User; import java.io.Serializable; import java.lang.reflect.Array; import java.util.Arrays; public class MainActivity_sec extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sec); //接收MainActivity的传过来的数据值,并保存到相应值中 Intent intent = getIntent(); int age = intent.getIntExtra("age",0);//接收第一个int型数据,没有就使用默认值0 int score = intent.getIntExtra("score",0);//没有使用bundle时值为0,使用后为100,bundle接受数据 String name = intent.getStringExtra("name"); String[] aihao = intent.getStringArrayExtra("aihao"); //自定义类User.class接收数据 Serializable user = (User)intent.getSerializableExtra("user"); Log.i("MainActivity_sec",age+" 显示年龄"); Log.i("MainActivity_sec",score+" 显示分数"); Log.i("MainActivity_sec",name+" 显示姓名"); Log.i("MainActivity_sec", Arrays.toString(aihao)); Log.i("MainActivity_sec",user.toString());//打印user自定义数据 } public void back(View v){//“返回”按钮的方法 Intent intent = new Intent(); intent.putExtra("msg","这是从MainActivity返回来的数据"); setResult(200,intent); finish();//关闭activty,效果等同于返回按钮 } }
package com.xwb.userintent.model; import java.io.Serializable; /**JavaBean**/ public class User implements Serializable {//在该自定义User类放置自定义的部分数据,大部分情况数据来源于自定义类,如:数据库也多用于此类 private String name; private String password; private int age; public User(){ } public User(String name,String password,int age){ this.name = name; this.password = password; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\\'' + ", password='" + password + '\\'' + ", age=" + age + '}'; } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xwb.userintent"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Design.NoActionBar"> <activity android:name=".MainActivity_sec">/ </activity> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
plugins { id 'com.android.application' } android { compileSdkVersion 28 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.xwb.userintent" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'com.google.android.material:material:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' }
以上是关于Android Studio基础项目-两个Activity的Intent跳转与传值,并onActivityResult回传一个/多个值,与回传消息内容。的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio基础项目-两个Activity的Intent传值自定义类数据(如数据库数据读取)。
Android Studio基础项目-两个Activity的Intent传值自定义类数据(如数据库数据读取)。
Android Studio基础项目-两个Activity的Intent基本传值。配置运行安卓版本,去除深蓝色按钮,全屏展示APP运行。
Android Studio基础项目-两个Activity的Intent基本传值。配置运行安卓版本,去除深蓝色按钮,全屏展示APP运行。
Android Studio基础项目-两个Activity的Intent跳转与传值,并onActivityResult回传一个/多个值,与回传消息内容。
Android Studio基础项目-两个Activity的Intent跳转与传值,并onActivityResult回传一个/多个值,与回传消息内容。