活动是什么
活动是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。
一.手动创建活动
1. 点击Start a new Android Stdio project选择 No Activity 点击Next
自定义项目名字和保存位置点击Finish![在这里插入图片描述](https://img-blog.csdnimg.cn/20200719192826160.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhYXp6eg==,size_16,color_FFFFFF,t_70)
2. 创建活动,在com.example.activity包下New-Activity-Empty Activity新建Resive_Activity活动不要勾画Generate a layouty file(自动创建布局文件),Launcher Activity(设置为主活动)
3. 创建布局,在app/src/main/res目录下new-Directory创建一个layout文件夹,在layout文件夹下new-layout Ressource File创建一个布局文件resive_activitylayout
完成后点开resive_activitylayout文件,吧右上角的Code换成Split如图所示,可以看到此时是一个空白页面
我们给他简单的加一个按钮
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"/>
现在在右边可以看到我们加的按钮
4.加载布局,添加一句代码setContentView(R.layout.resive_activitylayout);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.resive_activitylayout);
}
5.注册并设置主活动,android stdio会自动帮我们完成注册,打开AndroidManifest.xml文件
<activity android:name=".Resive_Activity"></activity>
这里就是注册
设置主活动:添加如下代码
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
创建完成,现在运行程序,如下:
二.活动的基本用法
1.Toast:Toast是android系统提供的一种提醒方式,在程序中使用它将一些短小的信息告诉用户,用法如下
我们通过点击刚创建的按钮来发出提醒,吧Resive_Activity中onCreate改成如下就做好了,再次运行点击Button就显示我们想显示的信息
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.resive_activitylayout);
Button button1 = findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(Resive_Activity.this,"you are a pig",Toast.LENGTH_SHORT).show();
}
});
}
2.在活动中使用Menu
1.首先和刚才建布局文件resive_activitylayout一样在app/src/main/res目录下new-Directory创建一个menu文件夹,在menu文件夹下new-menu Ressource File创建一个菜单文件revise_activitymenu,建成后如下![在这里插入图片描述](https://img-blog.csdnimg.cn/20200719204039802.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhYXp6eg==,size_16,color_FFFFFF,t_70)
在里面添加菜单项
<item
android:id="@+id/item_1"
android:title="Add"/>
<item
android:id="@+id/item_2"
android:title="Remove"/>
2.在活动中加载菜单,重写onCreateOptionsMenu方法
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.revise_activitymenu,menu);
return true;
}
3.设置菜单项响应事件,重写onOptionsItemSelected方法
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.item_1:
Toast.makeText(zzzOneActivity.this,"猪头",Toast.LENGTH_SHORT).show();
break;
case R.id.item_2:
Toast.makeText(zzzOneActivity.this,"猪头",Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
3.显式Intent与隐式Intent
android中可用Intent来实现切换不同活动
显式Intent
public void onClick(View view) {
Intent intent = new Intent(Resive_Activity.this,Resive_Activity2.class);
startActivity(intent);
}
隐式Intent
我们可对活动配置<intent-filter标签,指定当前活动能够响应的action和category,通过这种匹配,来用intent打开指定活动
使用intent打开Resive_Actiity3
<activity android:name=".Resive_Activity3">
<intent-filter>
<action android:name="abcdef"/>
//当我们定义自己的操作,随意写不出错,建议将应用的软件包名称作为前缀,动作名称用大写。
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Button button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent("abcdef");
intent.addCategory("android.intent.category.DEFAULT");
//我们可以不用手动添加android.intent.category.DEFAULT,系统会自动添加这个Category
//可添加多个Category
startActivity(intent);
}
});
向下传递数据
配合Intent使用,在用intent打开另一个活动时,可传递数据到要打开的活动
- 传递方:
第一个参数是键,用于后面取值,第二个参数是真正要传的数据
Intent intent = new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("str_name","123");
startActivity(intent);
- 接收方:
Intent intent = getIntent();
String str = intent.getStringExtra("str_name");
Toast.makeText(MainActivity2.this,str,Toast.LENGTH_SHORT).show();
返回数据给上一个活动
当使用 startActivityForResult()开启活动时,可在活动销毁时返回一个结果给上一个活动。(注意:一定是活动销毁时才能将数据返回)
- 上一个活动开启当前活动
Intent intent = new Intent(MainActivity.this,MainActivity2.class);
startActivityForResult(intent1,1);
- 当前活动返回数据逻辑
Intent intent1 = new Intent();
intent1.putExtra("one","one");
//第一个参数是返回码,一般用RESULT_OK或RESULT_CANCELED,用于后面数据的获取
setResult(RESULT_OK,intent1);
- 上一活动取出数据
每一个活动活动返回的数据都会回调到 onActivityResult()方法中
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1){
if(resultCode==RESULT_OK){
String str = data.getStringExtra("one");
Log.d("MainActivity",str);
}
}
}
三.活动生命周期
返回栈
Android是使用任务来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈就是返回栈,栈是一种后进先出的数据结构,当我们调用finish()或按下back键,处于栈顶的活动会出栈,前一个入栈的活动会重新处于栈顶位置。
活动的生命周期
1. onCreate() 活动第一次创建的时候调用,进行活动的初始化操作
2.onStart() 活动由不可见变为可见是调用
3.onResume() 活动准备好和用户进行交互的时候调用
4.onPause() 系统准备去启动或恢复另一个活动的时候调用
5.onStop() 活动完全不可见时调用
6.onDestroy() 活动销毁之前调用
7.onRestart() 活动由停止状态变为运行状态时调用
活动的启动模式
可在AndroidManifest.xml文件的activity标签下设置活动的启动模式如下:
<activity android:name=".MainActivity">
android:launchMode="singleTop"
...
</activity>