Android第一行代码——第二章活动

活动是什么

活动是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。

一.手动创建活动

1. 点击Start a new Android Stdio project选择 No Activity 点击Next
自定义项目名字和保存位置点击Finish在这里插入图片描述

在这里插入图片描述

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,建成后如下在这里插入图片描述
在里面添加菜单项
<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
  1. 修改AndroidManifest.xml文件
<activity android:name=".Resive_Activity3">
           <intent-filter>
               <action android:name="abcdef"/>		
               //当我们定义自己的操作,随意写不出错,建议将应用的软件包名称作为前缀,动作名称用大写。
               <category android:name="android.intent.category.DEFAULT"/>
           </intent-filter>
       </activity>
  1. 设置Intent
   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>
1. standard 默认的启动模式,每次启动活动都会创建该活动的实例
2.singleTop 如果当前的返回栈栈顶是该活动,则在启动活动时不会再创建新的活动实例
3.singleTask 在该模式下某个活动在整个应用程序中只有一个实例,即返回栈中只会创建一个该活动
4.singleInstance 在该模式下会启动一个新的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都公用一个返回栈,此时就不会创建新的活动

猜你喜欢

转载自blog.csdn.net/haazzz/article/details/108526772