Android活动(Activity)
一直在学习郭霖老师的《第一行代码》,我整理了第二章的笔记。安卓的activity是安卓的四大组件之首,重要性不言而喻。下面的内容都是很基础的。
目录
首先,没有在AndroidManifest.xml里面注册的活动是不可以使用的,但是AS会帮助你自己注册(前提是你新建的是活动而不是Java类)。你只需要在此xml中声明主活动即可。声明主活动的语句应该也是死的。(AS强大的提示功能)
所有的活动都必须继承Activity类或者是它的子类,然后才能有活动的特性。活动必须重写onCreate()方法,这个方法是一个活动被创建时必须执行的,重写的格式固定。
Super.onCreate(savedInstanceState);//(AS自动写出了)
安卓的设计讲究逻辑和视图分离,因此不推荐在活动中直接编写界面。通用做法是在布局(layout)中编写界面,然后在活动中将它引用过来。引入布局是setContentView(id),同理,如果你在创建活动时勾选了Generate LayoutFile,那么会自动引入。
布局文件都在res/layout目录下。
一般把所有的图片放在drawable-xxhdpi文件夹
当使用AS创建项目时,如果选用AddNoActivity,并且再创建活动的时候不勾选GenerateLayout,那么项目中并不包含layout文件夹的,需要手工创建。
引用id的时候使用@id/idname,而制定id则@+id/id_name
安卓中match_parent表示和父元素相等,而wrap_content表示当前元素只要刚好能包含里面的内容即可。
在活动中添加Toast标签
首先在Activity中实例化layout文件夹内的文件中的Button
Button button1=(Button)findViewById(R.id.button_1);
这里我认为R文件中,普通元素的id引用都是这样的,而文件的引用则是R.文件夹名.文件名
实例化之后要为这个button1添加监听器。
button1.setOnClickListener(new View.OnClickListener()
AS会自动重写onClick方法,在这个方法中声明Toast即可。
Toast.makeText(在哪个活动界面活动(上下文),要弹出的内容,弹出的时间长短).show();
//上下文建议 当前类名.this
在活动中使用Menu
1.在res文件夹中创建menu目录,随后在其中新建Menu resource file。(必须是menu目录,否则找不到相关的file。)
2.在这个file中创建菜单项格式为
<item android:id=”@+id/idname”
android :title=”name” />
3.在活动中重写OnCreateOptionsMenu()方法,Ctrl+O快捷键。在方法中,添加getMenuInflater().inflate(,);期间的参数为file的id,以及默认的menu参数 ,return true;
4.重写onOptionsItemSelected()方法,里面用switch(item.getItemId())来表示选中的按键。return true;
活动的销毁:
一般情况下,back按键即可销毁活动;或者listener添加finish()即可销毁当前活动。
活动中的穿梭
从主活动跳转到其他活动需要Intent。有显式Intent和隐式Intent之分。
先来看显式Intent:
首先需要在com的那个包里创建一个新的Activity,这次让他帮忙生成布局layout文件,AS在对应的Acticity中也自动导入了这个布局文件。
我们需要做的是从主活动跳转到新活动中来,很明显主活动只有一个button可以使用。
Intent intent =new Intent(pageContext(所处文件名.this),新java.class);
startActivity(intent);//启动这个Intent对象即可
显式的Intent很简单,接下来看隐式Intent,官方推荐隐式Intent?
隐式Intent不仅可以启动自己程序的活动,还可以启动其他程序的活动,这使得不同程序之间共享功能成了可能。
隐式Intent的声明
Intent intent=new Intent(Intent.ACTION…)
Intent.setData(Uri.parse(“内容”))
StartActivity(intent);
隐式声明相当于告诉系统我需要一个明确特性的程序,系统提供所有满足要求的程序以供选择。程序可以提供的特性在AndroidMainifest中的<intent-filter>标签中提供。
Intent还可以用来传递数据,界面之间的联系靠的就是Intent。
-
向下一个活动传递数据。
在button中按规定声明Intent,随后声明一个字符串。
Intent的对象.putExtra(“代号”,字符串变量);
startActivity(intent);
另一个活动接受字符串,首先声明Intent
Intent intent=getIntent();
String data=intent.getStringExtra(“代号”);
注意:1.声明的属性与要接受的属性有关,你必须知道要接受的类型,方法有getIntExtra,getStringExtra等等。
2.返回数据给上一个活动。
返回上一个活动只需要按一下返回键就可以了,但是Android还是提供了一个startActivityForResult()的启动方法来在活动销毁的时候能返回一个结果给上一个活动。
过程:首先正常声明intent,然后启动时用startActivityForResult(intent,特殊数值)来启动下一个活动。
下一个活动再
Intent intent=new Intent();
String data="Me Too";
intent.putExtra("data_return",data);
setResult(RESULT_OK,intent);
finish();
然后回到上一级活动,因为我们启动下一个活动用的是startActivityForResult方法,所以当下一个活动销毁之后,上一级页面需要重写onActivityResult方法。
这个方法有三个参数,requestCod方法是那个特殊值,resultCode是返回值(RESULT_OK),第三个是数据值。
在方法中
switch (requestCode)
{
case 1:
if (resultCode==RESULT_OK)//注意这里的变量
{
String returndata=data.getStringExtra("data_return");
Toast.makeText(this,returndata,Toast.LENGTH_SHORT).show();
}
break;
default:
}
安卓的返回键的方法是onBackPressed(),可以在活动中重写这个方法来达到目的!
活动的生命周期
活动的启动模式
Android一共有4种启动模式,standard,singleTop,singleTask,和singleInstance。可以通过在AndroidManifest.xml中通过给activity标签指定android:launchMode来选择启动模式。
1.standard
程序默认的是Standard启动方式,特点就是指哪打哪,不管有没有。
2..singleTop
特点是如果活动在栈顶,那么在又一次创造本活动时,不会创造。
3.singleTask
特点是每次启动该活动时,系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把这个活动之上的活动统统出栈。
4.singleInstance
特点是声明为该模式的活动,系统会把他分到另外的一个单独的栈中。