1. 创建右上角菜单
- 在res目录下新建menu目录用于保存菜单文件
- 在menu中新建一个Menu resource file文件,比如这样的:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 每个item为一个菜单项,id用于标识菜单项,title即为菜单中这个菜单项的显示文字 -->
<item
android:id="@+id/add_menu_main"
android:title="Add"/>
</menu>
- 在想要添加该菜单的Activity中重写onCreateOptionsMenu()方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//这里的第一个参数就是想要添加的菜单的文件名
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
- 重写onOptionsItemSelected()方法用于对应的菜单项点击之后的事件处理
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.add_menu_main:
Toast.makeText(this, "You clicked add", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
2. 关于Activity的生命周期的7个回调方法的个人简析:
- Activity_1第一次启动时将依次调用onCreate()、onStart()、onResume()方法。这里的Resume意思时恢复、重新开始,用于再次启动。
- Activity_1中启动一个对话框类型Activity Activity_2时,Activity_1将被部分遮挡,调用onPause()方法进入暂停状态。接下来从Activity_2返回Activity_1或者Activity_2执行finish()方法结束的话,Activity_1将会调用onResume()重新启动。
- Activity_1中启动一个新的Activity Activity_3,Activity_1被完全遮挡,这时Activity_1将依次调用onPause()、onStop()方法进入停止状态。接下来从Activity_3返回Activity_1或者Activity_3执行finish()方法结束的话,Activity_1将会依次调用onRestart()、onStart()、onResume()方法重新启动。
- 如果Activity_1在暂停状态被完全遮挡,Activity_1将会调用onStop()方法进入停止状态。
- Activity_1在活动状态进入销毁状态将会依次调用onPause()、onStop()、onDestroy()方法
3. Activity在停止状态被回收怎么将已输入的信息保存下来
其实就是重写onSaveInstanceState()方法使用Bundle将需要保存的数据保存下来,然后在onCreate()方法中加入检测onCreate()方法中的saveInstaceState参数是否不为null的过程,因为不为null的话就说明携带有上一个被回收的该Activity的数据需要进行处理。
大概方法如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
//判断不为null的话就进行对应的事件处理
if(savedInstanceState != null){
String name = savedInstanceState.getString("name");
}
}
//重写onSaveInstanceState()方法
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//模拟一个已存在的需要保存的数据name
String name = "test name";
//将name通过key-value的方法放入Bundle对象outState中进行传递
outState.putString("name",name);
}
4. Activity的四种启动模式 简析
Activity的启动模式默认为standard模式,如果想要更改某个Activity的启动模式可以在AndroidManifest配置文件中更改。
例如将一个Activity更改为singleTop模式启动:
<activity android:name=".FirstActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
-
standard模式
启动新的Activity时,直接创建一个新的实例压入栈顶。
-
singleTop模式
启动新的Activity时,如果栈顶就是该Activity则直接使用该实例;否则等于standard模式。
-
singleTask模式
启动新的Activity时,如果栈内存在该活动的实例则将它之前的所有实例出栈使其位于栈顶来使用该实例;否则创建一个实例压入栈顶。跨应用启动使用该启动模式的Activity时,会可能将其在一个新的栈中启动,其影响因素与AndroidManifest配置文件中的taskAffinity属性有关。
参考:Android中Activity四种启动模式和taskAffinity属性详解
-
singleInstance模式
简单来说就是使用这个模式启动的Activity将在一个新的栈中启动并且在这个栈中只能有这一个Activity。例如启动使用SingleInstance启动模式的ThirdActivity