Activity是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序可以包含零个或多个活动。
打开android studio,在src/main/java目录下右键选择new -> Activity -> Empty Activity即可。默认情况下会勾选Generate a Layout File,即自动生成布局文件。
若步骤1中并未勾选默认创建布局文件,则在src/main/res目录下,右键选择new->Android Resources File,新建一个布局文件,并在相应的activity中,调用setContentView(R.id.资源文件名)方法设置为该activity的引用布局文件。
注册代码示例:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.joygin.viewtest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--Activity注册代码-->
<!--name为被注册的activity名称,label为标题栏的名称,主Activity的标题栏名称还会成为应用程序名称-->
<activity android:name=".MainActivity" android:label="标题栏名称">
<!--意图过滤器-->
<intent-filter>
<!--配置该Activity为主Activity,即程序的最开始画面-->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
1、在res目录下创建一个名为menu的Directory,并在menu目录下右键new -> Menu resource file ,创建一个名为main的菜单布局文件
2、菜单布局文件中设置menu的内容,示例代码如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!--id指定菜单项的唯一标识符,title指定菜单项的名称-->
<item android:id="@+id/add_item"
android:title="add" />
<item android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
3、在对象的Activity源文件中,重写onCreateOptionsMenu()方法,示例代码如下:
//返回值为true,表示允许创建的菜单显示出来,返回false表示禁止显示。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
4、设置菜单项相应事件,重写activity中的onOptionsItemSelected()方法,示例代码如下:
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getGroupId()){
case R.id.add_item:
Toast.makeText(this, "clicked add", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"clicked remove",Toast.LENGTH_SHORT).show();
break;
default:;
}
return true;
}
按下系统的back键即可销毁Activity,如果要程序主动销毁Activity,需调用finish()方法。
示例代码:
//设置按钮btn1的监听事件,点击后关闭页面
btn1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
finish();
}
});
Intent是Android程序中各组件之间交互的一种重要方式,其作用主要有以下两点:
//在原activity调用
Intent intent = new Intent(上下文,目标Activity.class);//第一个参数为上下文,activity本身就是一个上下文,可以直接调用this
startActivity(intent);
AndroidManifest.xml文件中:
<!--假设目标Activity是SecondActivity,使用隐式intent跳转到Activity-->
<!--AndroidManifest.xml中配置SecondActivity-->
<activity android:name=".SecondActivity">
<intent-filter>
<!--只有同时匹配action和category的intent才能匹配到这个activity-->
<action android:name="com.example.activitytest.ACTION_START"/> <!--action只有一个,action名称自定义,一般为类的全限定路径-->
<!--category可以有多个,此为系统提供的默认category,activity调用时无需添加-->
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="com.example.activitytest.MY_CATEGORY"/><!--自定义的category-->
</intent-filter>
</activity>
调用方activity中:
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCatefory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
Intent.setData(Uri uri):
用于传递字符串数据,参数一般通过Uri.parse()方法解析产生。
此方法对应配置文件中的标签。
主要用于向系统程序的跳转,如浏览器传递地址,短信传递接受手机号码,电话传递接口手机号码。
流程:
示例代码
btn1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent(Intent.ACTION_VIEW);.//Intent.ACTION_VIEW是Android系统内置的action
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});
方式:调用intent.putExtra方式设置数据进行传递。接受方通过getIntent()获取intent,再通过intent.get对象类型Extra("键")获取数据。
流程:
示例代码
//原activity传递数据
btn1.setOnClickListener(new OnClickListener(){
@Override
public void OnClick(View v){
String data = "Hello World";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("key",data)
startActivity(intent);
}
});
//目标activity接受数据
@Override
protected void OnCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
Intent intent = getIntent();
String data = intent.getStringExtra("key");
}
方式:通过startActivityForResult(intent, requesCode)方法跳转到目标activity,目标activity调用setResult(resultCode , intent)方法设置数据,原activity再重写onActivityResult获取数据。
流程:
示例代码:
//----------原activity
//设置按钮监听
btn1.setOnClickListener(new OnClickListener(){
@Override
public void OnClick(View v){
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
}
});
//重写onActivityResult方法
@Override
protected void OnActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode){
case 1:
if(resultCode == 2){
String data = data.getStringExtra("key");
}
break;
default:
}
}
//-----------目标activity
btn2.setOnClickListener(new OnClickListener(){
@Override
public void OnClick(View v){
Intent intent = new Intent();
intent.putExtra("key","Hello World");
setResult(2, intent);
finish();
}
});
requestCode和resultCode区别:
requestCode用于区分不同的请求,resultCode用于区分返回处理结果是否成功。
activity是保存在返回栈中的,activity显示时则位于栈顶,按下系统后退键则弹出任务栈。在此界面上再打开一个activity则将新activity压入栈。调用activity的finish()方法则弹出栈。
当一个活动位于返回栈的栈顶时,该活动处于运行状态。
活动不再处于栈顶位置,但仍然可见。例如通过小窗模式打开新的activity,则原先的activity处于暂停状态。
活动不再处于栈顶位置,并且完全不可见
活动从返回栈中移除后处于销毁状态。系统优先回收该类活动。
onCreate():Activity第一次创建时调用。常在该方法中完成初始化操作,如加载布局,绑定事件等。
onStart():Activity由不可见变为可见时调用。
onResume():activity准备好和用户进行交互时调用,即重新回到返回栈顶时调用。
onPause():activity离开栈顶时。
onStop():activity变为完全不可见时调用。
onDestroy():activity被销毁前调用。
onRestart():活动由停止状态变为运行状态之前调用,在onStart()方法之前执行,首次创建时不执行。
注:除了onRestart()方法,其他方法都是两两相互对应的。
完整生存期:从onCreate()到onDestroy()
可见生存期:onStart()到onStop()
前台生存期:onResume()到onPause()
使用standard模式的activity,不管返回栈中是否已经存在该activity,每次启动都会创建该activity的一个新的实例。
启动activity时,如果发现返回栈的栈顶已经是该activity,则直接使用它,否新新建该activity的实例。
指定为singleTask模式的activity,每次创建该activity会先检查返回栈中是否存在,如果存在,则将该activity上的所有activity都移除返回栈。否则会创建一个新的activity实例。
指定为singleInstance模式的activity会启用一个新的返回栈管理该活动。使用场景:该程序和其他程序一同使用共享该activity。
在AndroidManifest.xml中,给标签指定 android:launchMode 属性来选择启动模式。
方式:
方式:
ActivityCollector示例代码:
public class ActivityCollector{
public static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for(Activity activity : activities){
if(!activity.isFinishing()){
activity.finish();
}
}
activities.clear();
}
}
BaseActivity示例代码:
public class BaseActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy(){
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章