设置激活的组件的方式:
- intent.setClassName(packageName,className); 激活其他应用的Activity和激活本应用
参数:- packageName需要激活其他应用的包名。
- className需要激活本应用的组件所在的位置
- intent.setClass(MainActivity.this , OtherActivity.class); 设置激活的组件
参数:- 上下文对象
- 需要激活的组件class文件
- intent.setClassName(MainActivity.this , “com.example.myactivity.OtherActivity”); 设置激活的组件
参数:- 上下文对象
- 需要激活的组件所在的位置
-
intent.setComponent(new ComponentName(MainActivity.this,OtherActivity.class));
设置激活的组件。传入ComponentName对象
参数:- 上下文对象
- 需要激活的组件class文件
-
Intent intent=new Intent(MainActivity.this,OtherActivity.class);
使用意图的构造
参数:- 上下文对象
- 需要激活的组件class文件
-
MainActivity.this.startActivity(intent);
启动(激活)组件
参数:- 意图对象
- 意图对象
-
intent.putExtra(“name”,value);
传数据到另一个Activity
参数:- name值得名称,用于取值的时候
- value需要传得数据
- Bundle bundle=new Bundle();
传多个数据到另一个Activity。Bundle像map,相对map来说Bundle提供了常用的数据类型
意图里的putExtras方法可以添加Bundle对象
bundle.putXxx 添加数据
intent.putExtras(bundle);
-
MainActivity.this.startActivityForResult(intent,200);
接收其他Activity关闭后传回来的数据
参数:- 意图
- 请求码
-
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
此方法是系统调用的.
其他界面的Activity一旦关闭了(finish)系统就会把结果数据(Intent意图添加的数据)转给MainActivity中的onActivityResult方法,该方法是系统调用的
参数:- 启动码和结果码可以知道在本类中什么地方发生的请求
- requestCode本页调用的启动码
- resultCode OtherActivity界面中的结果码
- data返回的数据
package com.example.myactivity;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt=this.findViewById(R.id.bt1);
bt.setOnClickListener(new onClick());
}
public class onClick implements View.OnClickListener{
@Override
public void onClick(View view) {
//意图
Intent intent=new Intent();
//激活其他应用的Activity,激活本应用
//参数:packageName需要激活其他应用的包名。className需要激活本应用的组件所在的位置
intent.setClassName("com.example.myactivity","com.example.myactivity.OtherActivity");
//上下文--需要激活的组件class文件
//intent.setClass(MainActivity.this,OtherActivity.class);//设置激活的组件
//上下文---需要激活的组件所在的位置
//其实就是反射Class.forName("com.example.myactivity.OtherActivity");
//intent.setClassName(MainActivity.this,"com.example.myactivity.OtherActivity");
//传入ComponentName对象,参数:上下文---需要激活的组件class文件
//intent.setComponent(new ComponentName(MainActivity.this,OtherActivity.class));
//使用意图的构造,参数:上下文---需要激活的组件class文件
//Intent intent=new Intent(MainActivity.this,OtherActivity.class);
//1.转数据到另一个Activity
//intent.putExtra("name","某某");
//intent.putExtra("age",18);
//2.转数据到另一个Activity
//Bundle像map,相对map来说Bundle提供了常用的数据类型
Bundle bundle=new Bundle();
bundle.putString("name","谅解备忘录");
bundle.putInt("age",18);
//putExtras可以添加bundle
intent.putExtras(bundle);
//启动(激活)组件
//MainActivity.this.startActivity(intent);
//参数:意图,请求码
MainActivity.this.startActivityForResult(intent,200);
}
}
/**
* Dispatch incoming result to the correct fragment.
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
//启动码和结果码可以知道在本类中什么地方发生的请求
//requestCode本页调用的启动码
//resultCode OtherActivity界面中的结果码
//data返回的数据
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {//此方法是系统调用的
String name = data.getStringExtra("name"); //打印出数据
Toast.makeText(this, name, Toast.LENGTH_SHORT).show();
super.onActivityResult(requestCode, resultCode, data);
}
}
添加的Activity界面:
Intent intent=this.getIntent(); 用于激活得到其它传过来的意图对象
intent.getStringExtra(“name”); 获取添加的数据,使用数据的名称获取
OtherActivity.this.setResult(30,data); 设置返回数据。 第一个结果码。第二个需要传回去的意图的数据。
OtherActivity.this.finish关闭当前的Activity
package com.example.myactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.Nullable;
public class OtherActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.otheractivity);
TextView tv=this.findViewById(R.id.tv);
//用于激活它的意图对象
Intent intent=this.getIntent();
//单个添加的
/* String name=intent.getStringExtra("name");
//参数不存在返回0
int age = intent.getIntExtra("age",0);
tv.setText(name+age);*/
//获取Bundle添加的数据
Bundle bundle=intent.getExtras();
String name=bundle.getString("name");
int age=bundle.getInt("age");
tv.setText(name+age);
//按钮
this.findViewById(R.id.bt2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent data=new Intent();
data.putExtra("name","大佬aaaa");
//第一个结果码。第二个意图的数据
OtherActivity.this.setResult(30,data);//设置返回数据
//finish关闭当前的Activity
OtherActivity.this.finish();
//一旦关闭了系统就会把结果数据转给MainActivity中的onActivityResult方法,该方法是系统调用的
}
});
}
}
跳转过去的界面xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:text="我是新Activity"
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="关闭Activity"
android:id="@+id/bt2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
主页面xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/bt1"
android:text="跳转新Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>