Unit2:活动
1.基本用法
1.创建活动

Generate LayoutFile 创建布局文件
Launcher Activity 自动注册为主活动
编写顺序
- 活动Activity
- 注册.xml
- 界面res.xx
2.Toast使用
Activity中:
Button button1 = findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FirstActivity.this,"you clicked Button 1", Toast.LENGTH_SHORT).show(); // 使用方法:Toast.makeText(上下文,文本,时长).show
}
});
res.Layout中:
<Button
android:id="@+id/button_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="Toast使用"
/>
3.Menu使用
Activity中:
/**
* 活动上添加menu菜单
* @param menu
* @return
*/
@Override
public boolean **onCreateOptionsMenu**(Menu menu) { // 重写该方法启动menu
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
/**
* 给menu菜单添加功能
* @param item
* @return
*/
@Override
public boolean **onOptionsItemSelected**(@NonNull MenuItem item) { // 将menu中的菜单栏配上事件
// 判断添加那个菜单项
switch (item.getItemId()) {
case R.id.add_item:
Toast.makeText(this,"you clicked Add", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"you clicked Remove", Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
res.menu中:
<item
android:id="@+id/add_item"
android:title="Add"
></item>
<item
android:id="@+id/remove_item"
android:title="Remove"
></item>
2.活动穿梭
Intent显示传递
Activity中:
Button button3 = findViewById(R.id.button_3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); // 显示传送(开头,结尾)
startActivity(intent);
}
});
Intent隐示传递
Activity中:
Button button4 = findViewById(R.id.button_4);
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.activitytest.ACTION_START"); // 隐式传送(结尾)
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
Intent intent = new Intent(Intent.ACTION_VIEW); // 跳转百度
intent.setData(Uri.parse("http://baidu.com"));
startActivity(intent);
Intent intent1 = new Intent(Intent.ACTION_DIAL); // 跳转拨号
intent1.setData(Uri.parse("tel:10086"));
startActivity(intent1);
}
});
.xml中配置:
<activity android:name=".SecondActivity" android:label="second page">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" /> // 自定义action,跳转时需要访问
<category android:name="android.intent.category.DEFAULT" /> // 默认category,跳转时不需要编写
<category android:name="com.example.activitytest.MY_CATEGORY" /> // 自定义category,跳转时需要访问
</intent-filter>
</activity>
信息的向上传递
第一个Activity中开启传送并接收:
Button button6 = findViewById(R.id.button_6);
button6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, ThirdActivity.class);
startActivityForResult(intent, 1);
}
});
/**
* 接收上传数据
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode) {
case 1:
if(resultCode == RESULT_OK) {
String ResultData = data.getStringExtra("data_result");
Log.d("FirstActivity", ResultData);
}
break;
default:
}
}
第二个Acticity中接收发送数据:
Button button = findViewById(R.id.button_t1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_result","hello,firstActivity");
setResult(RESULT_OK,intent);
finish();
}
});
@Override
public void **onBackPressed()** {
Intent intent = new Intent();
intent.putExtra("data_result","hello,back!");
setResult(RESULT_OK,intent);
finish();
}
信息的向下传递
第一个Activity中传送:
Button button5 = findViewById(R.id.button_5);
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "hello secondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
}
});
第二个Activity中接收:
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);
3.活动生命周期

4.活动启动
更改.xml文件中的属性
<activity
android:name=".MainActivity"
android:label="主页"
android:launchMode="standard"> //更改属性,修改启动项********
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
| 名称 | 作用 |
|---|---|
| 默认 | 每次启动都创建一个新的活动 |
| singleTop | 可以防止自启动创建新的,但是其他活动启动,任然创建新的活动 |
| singleTask | 检查是否存在该活动,已经存在直接用。不存在,创建新的活动 |
| singleInstance | 新创建一个返回栈使用该活动 |
5.活动实践
1.检测运行的活动
编写BaseActivity类继承AppCompatActivity,其他活动继承该类,启动时打印出运行的活动名称:
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName()); // 检测运行的活动名称
}
}
2.统一销毁活动
编写活动管理器
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity) {
activities.add(activity);
}
public static void removeActivity(Activity activity) {
activities.remove(activity);
}
public static void finishAll() {
for(Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}
将活动管理器的初始化和销毁在BaseActivity中运行:
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this); // 将活动放入管理器
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this); //将活动在管理器中移除
}
}
之后就可以在继承了BaseActivity的活动中统一销毁所有的活动,退回界面了:
Button button1 = findViewById(R.id.buttonf1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCollector.finishAll(); // 退出活动
android.os.Process.killProcess(android.os.Process.myPid()); // 杀掉一个进程
}
});
3.最佳启动活动
对于需要参数访问的活动,最好建立一个actionStart()来时外界访问比较方便:
public static void actionStart(Context context,String data1,String data2) {
Intent intent = new Intent(context, 自己的名称.class);
intent.putExtra("data1",data1);
intent.putExtra("data2",data2);
context.startActivity(intent);
}

浙公网安备 33010602011771号