写在前面:仅供参考,一般是自己留着看的,如有错误,敬请指正。
这次的更新接着上次的博客,智能移动设备软件开发复习-第一天
第2章 Android UI开发
- RadioButton为单选按钮,它需要与RadioGroup配合使用,提供两个或多个互斥的选项集。 RadioGroup是单选组合框,可容纳多个RadioButton,并把它们组合在一起,实现单选状态。其他的属 性都是通用的,但是RadioButton有一个特有的属性checked,当该属性设置为true,按钮会默认选中。
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){ @override public void onCheckedChanged(RadioGroup group,int checkedId){ //判断点击的是哪一个RadioButton if(checkedId == R.id.rbtn){ textView.setText("您的性别是:男"); } else{ textView.setText("您的性别是:女"); } } } });
- ImageView是视图控件,它继承自View,其功能是在屏幕中显示图像。
两种方法的区别在于background会根据ImageView控件大小进行伸缩,而src是前景,以原图的大小进行显示。//法一 android:background="@drawable/bg" //法二 android:src="@android:drawable/sym_def_app_icon"
第3章 Activity
-
Activity的创建
在程序的包名处单击右键,选择[New] -> [Activity] ->[Empty Activity] -
Activityd的生命周期方法、
1️⃣onCreate()方法:在Activity创建时调用,通常做一些初始化设置@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
2️⃣onStart()方法:在Activity即将可见时调用
@Override protected void onStart(){ super.onStart(); }
3️⃣onResume()方法在Activity获取焦点开始与用户交互时调用
@Override protected void onResume(){ super.onResume(); }
4️⃣onPause()方法在当前Activity被其他Activity覆盖或锁屏时调用
@Override protected void onPause(){ super.onPause(); }
5️⃣onStop()方法在Activity对用户不可见时调用
@Override protected void onStop(){ super.onStop(); }
6️⃣onDestroy()方法在Activity销毁时调用
@Override protected void onDestroy(){ super.onDestroy(); }
7️⃣onRestart()方法在Activity从停止状态再次启用时调用
@Override protected void onRestart(){ super.onRestart(); }
- 当第一次运行程序时,在LogCat中观察,可以发现程序启动后依次调用了onCreate()、onStart()、onResume()。此时应用程序处于运行状态,等待与用户进行交互。
- 接下来单击模拟器上的"返回"按钮,程序则会依次调用onPause()、onStop()、onDestroy()方法。当调用了onDestroy()方法后,Activity被销毁清理出内存。
- onRestart()方法在有多个Activity进行切换的时候就可以看到onRestart()方法的执行。
-
Activity的启动模式
- Android中,采用任务栈的形式来管理Activity。通常一个应用程序对应一个任务栈,默认情况下每启动一个Activity都会入栈,并处于栈顶位置,用户操作的永远是栈顶的Activity。无论开启多少个Activity,最后开启的Activity都会被压入栈的顶端并且获得焦点,而之前开启的Activity仍然保存在栈中,但已经被停止了。系统会保存Activity被停止时的状态,当用户单击"返回"按钮时,当前Activity弹出,恢复之前的界面状态。
- standard模式
standard是Activity的默认启动模式,特点就是每启动一个Activity就会在栈顶创建一个新的实例。(闹钟程序通常采用这种模式) - singleTop模式
singleTop会判断要启动的Activity实例是否位于栈顶,如果位于栈顶则直接复用,否则要创建新的实例。(浏览器的书签通常采用这种模式) - singleTask模式
与singleTop的区别在于singleTop在创建一个Activity时会检查栈顶是否已经存在当前的Activity,而singleTask则会检查整个栈中是否存在当前的Activity实例,如果存在则直接使用,并把当前Activity之上的所有实例全部出栈,否则会重新创建一个实例。这样保证了整个应用程序中的Activity的唯一性。(浏览器主界面通常采用这种模式) - singleInstance模式
singleInstance模式是4个启动模式中最特殊的一个,主要目的是为了在不同程序中共享一个Activity实例。启动时分为两种情况,一种是要启动的Activity不存在,则系统会创建一个新的任务栈,然后再创建Activity实例。一种是要启动的Activity已存在,无论当前Activity在哪个程序的哪个任务栈中,系统都会把Activity所在的任务栈转移到前台,从而使Activity显示。(来电界面通常采用这种模式)
-
Activity之间的跳转
- Intent简介
- 显示意图
其中第一个参数为Context表示当前的Activity对象,这里直接用this即可,第二个参数Class表示要启动的目标Activity。Intent intent = new Intent(this, Activity.class); startActivity(intent);
- 隐式意图
隐示意图相比显示意图来说不指定目标组件,而是通过这只action和category等属性信息,系统根据这些信息进行分析,寻找目标Activity。Intent intent = new Intent(); intent.setAction("action");//此处的action为想设置的任意action startActivity(intent);
只有上述的代码还不行,还需要在目标Activity的清单文件中配置<intent-filter>,指定当前Activity能够响应的action和category<intent-filter> <action android:name="action"/> <category android:name="category"/> </intent-filter>
-
Activity中的数据传输
-
数据发送
Intent intent = new Intent(this, Activity.class); intent.putExtra("data", "Hello World!"); startActivity(intent);
第一个参数用于后面从intent取值,第二个参数是数据的内容
-
数据接收
Intent intent = getIntent(); String data = intent.getStringExtra("data");
getIntent()获取Intent对象,然后调用getStringExtra(),根据传入的键值,获取传递进来的数据。
如果传递的数据为整数类型时,则使用getIntExtra()方法,以此类推。 -
数据回传
在数据回传中,如何开启另一个ActivityIntent intent = new Intent(this, Activity.class); startActivityForResult(intent,1);
startActivityForResult()方法接收两个参数,第一个参数是intent对象,第二个参数是请求码,用来判断数据的来源,输入一个唯一的值即可。
如何在另一个Activity中回传数据Intent intent = new Intent(); intent.putExtra("data", "Hello World!"); setResult(1,intent);
通过setResult()方法来向上一个Activity回传数据,其中第1个参数用于向第一个Activity返回处理结果,称为resultCode,主要是在有多个Activity回传数据时,如何甄别是谁返回的数据。第二个参数是把带有数据的intent传递回去。
第一个Activity重写onActivityResult()方法来得到返回的数据。protected void onActivityResult(int requestCode, int resultCode,Intent data){ super.onActivity(requestCode, resultCode, data); if (requestCode == 1){ if (resultCode == 1){ String string = data.getStringExtra("data"); } } }
在Activity中,通过实现onActivityResult(int requestCode,int resultCode, Intent data)方法来获取返回的数据。该方法有3个参数,第1个参数requestCode表示在当前Activity启动第二个Activity时传递的请求码;第二个参数resultCode表示在Activity返回数据时传入的结果码;第3个参数data表示携带返回数据的Intent。
注:putExtra()中的第二个参数也可以传输别的类型的数据,例如ItemInfo,但是当回传后的数据接收就需要getSerializableExtra()方法来获取,通过Serializable接口来接收,而且之前还得有(ItemInfo)来转化类型
ItemInfo info = (ItemInfo) data.getSerializableExtra("data");
balabala写了一大堆,完成这些已经是2020/12/21日,复习效率有点低,完成软件工程基础的实验报告去了,明天回来接着更:)
-