1.在Android Studio中使用switch语句case语句当中不能使用R.id这是为什么?如何解决?
因为在Android Studio中,R.id是自动生成的一个类,在其中定义了所有XML文件中的控件ID。而在switch语句中,case后面只能跟整型常量表达式或枚举常量,不能直接使用R.id作为case的值,而R.id不是常量。特别是R.id.add_item在最新的Android中已不再作为一个常量存在,因此当我们使用switch语句时会报错;
解决这个问题的方法有两种:
(1) 将R.id转换为整型常量,可以使用以下代码将R.id.xxx转换为整型常量:```int id = getResources().getIdentifier("xxx", "id", getPackageName());```然后将id用于switch语句的case中。
(2) 使用if语句代替switch语句,因为if语句可以使用布尔表达式作为判断条件,而不仅限于整型常量。这两种方法都可以解决switch语句case语句当中不能使用R.id的问题。
如果代码基本工扎实推荐第二种方式解决问题。例如在第一行代码中的menu菜单的相关实例中就有涉及,解决方案如下代码:
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId()==R.id.add_item){
Toast.makeText(this,"You clicked add",Toast.LENGTH_SHORT).show();}
else {
Toast.makeText(this,"You clicked remove",Toast.LENGTH_SHORT).show();
}
return true;
}
2.Intent是什么?有何作用?
Intent是Android程序中各组件之间进行交互的重要方式。
作用:(1)指明当前组件想要执行的动作;
? ? ? ? ? ?(2)在不同组件之间传递数据;
? ? ? ? ? ?(3)启动活动、服务、广播接收器、内容提供器;
2.Intent大致可以分为几种?有何区别?
大致分为以下两种:
①显式Intent:打开第二各活动想要回到上一个活动,直接点击Back即可返回上一活动,这种Intent“意图”明显的就称为显式Intent;
②隐式Intent:不明确指出想要启动哪个活动,而是指定了一系列更为抽象的action(指明当前活动能够启动其他活动,并且一个活动中只能指定一个action)与category(指明一些附加信息)等信息,然后交由系统去分析这个Intent,判断合适的活动并启动;
区别:最主要的区别就是其“意图”。
3.什么是返回栈?
由于Android中是使用任务(Task)来管理活动,一任务就是一组存放在栈里活动的集合,这个栈就是返回栈。
4.返回栈是如何管理活动的?
由于栈是一种后进先出的数据结构,所以最新启动的活动始终处于栈顶,而系统总是显示处于栈顶的活动,当我们按下Back键时,处于栈顶的活动就会出栈,前一个入栈的活动就会重新处于栈顶。
5.活动有哪些状态?
①运行状态:即活动处于返回栈栈顶位置;
②暂停状态:此种状态的活动不处于栈顶,但是仍然可见,因为并不是每一个活动都会占满整个屏幕,而处于暂停状态的活动就是这种情况,其仍然是活着的,并且系统一般也不会回收这种活动,除非是内存及其不足时;
③停止状态:当一个活动不处于栈顶,并且完全不可见时,虽然系统仍会保持相应状态和成员变量,但是此时是不可靠的,且很有可能会被回收;
④销毁状态:当活动被从返回栈中移除后就变成了销毁状态。
6.Activity类定义了几种回调方法?
七种。分别是:
(1)onCreate():活动第一次创建时调用,并且要在该活动中完成初始化操作;
(2)onStart():该方法在活动由不可见变为可见时调用;
(3)onResume():该方法在活动准备好与用户交互时调用。且此时活动一定处于栈顶;
(4)onPause():这个方法在系统准备启动或恢复另一个活动时调用;
(5)onStop():这个方法在活动完全不可见的时候调用;
(6)onDetroy():这个方法在活动被销毁之前调用,之后活动状态将变为销毁状态;
(7)onRestart():这个方法在活动由停止转为运行状态时调用,即活动重新启动;
7.根据回调方法,活动可分为几种生存周期?分别是?
三种生存期。分别是:
(1)完整生存期:onCreate()---->onDestroy();
(2)可见生存期:onStart()---->onStop();
(3)前台生存期:onResume()---->onPause();