1.Activity配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activityforcommunication">
<application //application标签 中间是对主键说明的地方
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" //lable:显示标题栏名称
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"> //activity:我们是用activity进行说明主键
<intent-filter>
<action android:name="android.intent.action.MAIN" /> //name:activity所对应的类名,action:逻辑动作名,
<category android:name="android.intent.category.LAUNCHER" /> //category:是一个类别
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="这是第二个界面">
</activity>
<activity android:name=".FourActivty"
android:label="这是第四个界面">
<intent-filter>
<!-- 自定义逻辑动作名-->
<action android:name="guobaoyou.action.three"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="guobaorou.cetegory.test"/>
</intent-filter>
</activity>
<activity android:name=".ThreeActivity"
android:label="这是第三个界面">
<intent-filter>
<!-- 自定义逻辑动作名-->
<action android:name="guobaoyou.action.three"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>
package com.example.activityforcommunication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 启动SecondActivityActivity
* @param view
*/
public void starSecondActivity(View view){
Intent intent=new Intent();
//直接说明所要启动的Activity是哪个
intent.setClass(this,SecondActivity.class);
//启动
startActivity(intent);
}
/**
*启动ThreeActivity,隐式Intent
* @param view
*/
public void starThreeActivity(View view){
Intent intent=new Intent();
//设置一个逻辑动作名
intent.setAction("guobaoyou.action.three");
//添加类别
intent.addCategory("guobaorou.cetegory.test");
startActivity(intent);
}
}
2.Activity间的通讯
Intent
/**
* 调用系统已在的页面
* @param view
*/
public void startSystemActivity(View view){
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("content://contacts/people/1")); //调用系统中已经存在的电话号为1的联系人
startActivity(intent);
}
}
Activity的启动方式
①startActivite
②startActiviteForResult
Activity的传值方式
①通过intent中的putExtra方法传值到另一个组件,intent.putExtra(key,value);
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//取得传递的值
Intent intent=getIntent();
String hellow=intent.getStringExtra("hello"); //通过getExtra方法得到所传的值
TextView tv=new TextView(this);
tv.setText(hellow);
tv.setTextSize(40);
tv.setTextColor(Color.RED);
setContentView(tv);
}
Intent intent=new Intent();
//设置一个逻辑动作名
intent.setAction("guobaoyou.action.three");
//添加类别
intent.addCategory("guobaorou.cetegory.test");
//传值到另一个组件
intent.putExtra("hello","你好");
startActivity(intent);
}
②另一个组件通过方法getIntent()得到Intent,通过getExtras方法得到所传的对象,intent.putExtras(Bundle)
Bundle bundle=new Bundle();
bundle.putString("hello","hello word");
bundle.putInt("test",10);
intent.putExtras(bundle);
startActivity(intent);
Bundle bundle=intent.getExtras();
String hello=bundle.getString("hello");
int test=bundle.getInt("test");
TextView tv=new TextView(this);
tv.setText(hello+","+test);
Activity返回值
①使用strartActivityForResult()启动一个Activity
②重写onActivityForResult()方法接受返回
③在启动的Activity中,调用方法setResult()设置需要返回值的内容