【Android开发】【创建Activity,Activity之间的切换/消息传递】【java】

news/2024/7/16 7:47:29 标签: android studio, android, ide

一、第一个Activity

1.1 创建一个空Activity

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 创建一个布局

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
知识点
在XML中引用一个id:@id/id_name
在XML中定义一个id:@+id/id_name

在这里插入图片描述
右键错误,点击Show Quick-Fixes,再点击弹出的Suppress:Add........,错误会被自动修复
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.3 在AndroidManifest.xml文件中注册

在这里插入图片描述
现在程序就可以运行了

1.4 在活动中使用Toast

Toast:显示短小的信息,起到提醒作用

在这里插入图片描述
(不必纠结此处代码的语法)

效果:
在这里插入图片描述

1.5 在活动中使用Menu

在这里插入图片描述
在这里插入图片描述

回到FirstActivity,重写onCreateOptionsMenu()方法【按下Ctrl+o,可生成部分代码】

在这里插入图片描述
在这里插入图片描述

此时菜单就可正常打开了
在这里插入图片描述

之后为菜单添加事件

在FirstActivity中重写onOptionsItemSelected()方法【操作方法同上】

@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if (item.getItemId() == R.id.add_item) {
            Toast.makeText(this,"你点击了add",Toast.LENGTH_SHORT).show();
        }else if(item.getItemId()==R.id.remove_item){
            Toast.makeText(this,"你点击了remove",Toast.LENGTH_SHORT).show();
        }
        return super.onOptionsItemSelected(item);
    }

效果如下:
在这里插入图片描述

1.6 销毁一个活动

  1. Android中的Back按键【就是返回键】
  2. Activity类中的finish()方法

第二种,把finish()方法写进button1中,之后点击button1,活动就会关闭

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();//点击button1,活动就会关闭
    }
});

二、活动之间的切换(Intent)

Intent

  • 可以指明当前组件想执行的动作
  • 可以在不同组件之间传递数据

2.1 显式Intent

启动SecondActivity

新建一个名为SecondActivity的Activity

在这里插入图片描述

修改FirstActivity中button1的代码,使其能启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //启动SecondActivity
        Intent intent=new Intent(FirstActivity.this, SecondActivity.class);
        startActivity(intent);
    }
});

效果如下
在这里插入图片描述

2.2 隐式Intent

隐式Intent不知名我们要启动哪一个活动,系统分析这个Intent,之后帮我们找出合适的活动去启动。

  • 合适的活动:可以 响应 该隐式Intent的活动

注意

  • < action >和< category >同时匹配时,才可响应
  • 每个Intent只能指定一个action,却可以指定多个category

默认的category

修改SecondActivity的 < Activity >标签

在这里插入图片描述
修改FirstActivity中button1的代码,使其能启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //启动SecondActivity
        Intent intent=new Intent("com.example.noactivity.ACTTION_START");//不需要添加category,因为刚才xml中的是默认category
        startActivity(intent);
    }
});

之后启动,点击FirstActivity中button1,能启动SecondActivity

不用默认的category

修改SecondActivity的 < Activity >标签

在这里插入图片描述
修改FirstActivity中button1的代码,使其能启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //启动SecondActivity
        Intent intent=new Intent("com.example.noactivity.ACTTION_START");
        intent.addCategory("com.example.noactivity.MY_CATEGORY");//指定的category
        startActivity(intent);
    }
});

之后启动,点击FirstActivity中button1,能启动SecondActivity

2.2 隐式Intent【打开浏览器】

修改FirstActivity中button1的onClick()代码

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //指定了Intent的action是Intent.ACTION_VIEW
        Intent intent = new Intent(Intent.ACTION_VIEW);
        //用Uri.parse(),将网址解析为一个Uri对象。再调用Intent的setData()方法将该Uri对象传进去
        intent.setData(Uri.parse("http://www.baidu.com"));
        startActivity(intent);
    }
});

效果
在这里插入图片描述

2.3 隐式Intent【新建一个活动,使其能响应打开网站的Intent】

  • < intent-filter >中可再配置一个< data >标签,可以指定当前活动可以响应什么类型的数据
标签说明
android:scheme协议,如http
android:host主机名,如www.baidu.com
android:port端口,一般紧跟主机名之后
android:path主机名和端口之后的部分
android:mimeType指定可以处理的数据类型

创建活动,名为ThirdActivity,布局名为third_layout

third_layout.xml中添加button

<Button
        android:id="@+id/button_3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 3"
        tools:ignore="MissingConstraints" />

修改AndroidManifest.xml中ThirdActivity的部分

 <activity
     android:name=".ThirdActivity"
     android:exported="true" >
     <intent-filter tools:ignore="AppLinkUrlError">
         <action android:name="android.intent.action.VIEW"/>
         <category android:name="android.intent.category.DEFAULT"/>
         <data android:scheme="http"/>
     </intent-filter>
 </activity>

此时ThirdActivity也可响应button1访问http://www.baidu.com的intent

2.4 隐式Intent【调用系统拨号页面】

修改button按键的onClick()方法。

主要看的是Intent 的action

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:10086")); //String转Uri,再通过setData()传入intent
        startActivity(intent);
    }
});

效果

在这里插入图片描述

2.5 向下一个活动传递数据

思路:把数据存放在intent中,启动另一个活动后,把这些数据从intent中取出即可

  • intent.putExtra()
  • getIntent()
  • intent.getStringExtra("extra_data")

在FirstActivity中启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String data = "Hello SecondActivity";//要发送的数据
        
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);//intent
        intent.putExtra("extra_data",data);//两个参数,(“键”,“要传递的数据”)
        startActivity(intent);
    }
});

在SecondActivity中取出数据,并打印出来

public class SecondActivity extends AppCompatActivity {
    private static final String TAG = "SecondActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);

        Intent intent=getIntent();//获取intent
        String data=intent.getStringExtra("extra_data");//键
        Log.d(TAG, data);//在logcat中打印数据
    }
}

logcat中的数据

在这里插入图片描述

2.5 返回数据给上一个活动

  • startActivityForResult();:该方法期望在活动销毁时能够返回一个结果给上一个活动
  • putExtra()
  • setResult()
  • onActivityResult()

在FirstActivity中启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);//intent
        startActivityForResult(intent,1);//参数(intent,请求码)
    }
});

SecondActivity中button事件。点击后SecondActivity结束,返回数据(在intent中)

button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent();
        intent.putExtra("data_return","Hello FirstActivity");
        setResult(RESULT_OK,intent);//向上一个活动返回数据(数据在intent中)
        finish();//结束SecondActivity
    }
});

覆写FirstActivity中的onActivityResult()方法,以获取返回数据

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {//根据请求码,进入不同的分支
        case 1:
            if (resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");//根据键值,获取返回数据
                Log.d("FirstActivity", returnedData);
            }
            break;
        case 2:
            break;
        default:
    }
}

结果:

在这里插入图片描述

参考

第一行代码,郭霖


http://www.niftyadmin.cn/n/5446654.html

相关文章

安装paddle detection心得

一、安装PaddlePaddle conda create -n mypaddle python3.8 conda activate mypaddle python -m pip install paddlepaddle-gpu2.6.0 -i https://mirror.baidu.com/pypi/simple 请确保您的PaddlePaddle安装成功并且版本不低于需求版本。使用以下命令进行验证。 这是CUDA1…

每日五道java面试题之springboot篇(三)

目录&#xff1a; 第一题. Spring Boot 中的监视器是什么&#xff1f;第二题. 如何在 Spring Boot 中禁用 Actuator 端点安全性&#xff1f;第三题. 我们如何监视所有 Spring Boot 微服务&#xff1f;第四题. 什么是 WebSockets&#xff1f;第五题. 什么是 Spring Data ? 第一…

嵌入式学习第三十天!(单向链表练习)

1. 单向链表的逆序&#xff1a; int Is_Empty_Link(LINK_LIST *plist) {return plist->phead NULL; }void Reverse_Link(LINK_LIST *plist) {LINK_NODE *ptmp plist->phead;LINK_NODE *pinsert NULL;plist->phead NULL;if(Is_Empty_Link(plist)){return;}else{wh…

Vue3:编程式路由导航

一、情景说明 Vue3的用法略有区别 Vue2的用法&#xff1a;https://blog.csdn.net/Brave_heart4pzj/article/details/136326608 二、案例 简单理解&#xff1a;RouterLink中to怎么写&#xff0c;router.replace或router.push中就怎么配置。 <!-- 跳转的按钮 --> <…

亚马逊云科技:企业如何开启生成式AI之旅?

如果要评选最近两年全球科技行业最热门的细分领域&#xff0c;那么生成式AI绝对会以遥遥领先的票数成为当仁不让的冠军。 然而眼见生成式AI发展得如火如荼&#xff0c;越来越多的企业却陷入了深深的焦虑&#xff1a;应该如何开启生成式AI之旅&#xff1f;又该怎样搭建大模型&am…

【Redis底层原理】之数据结构与持久化机制

Redis 是一个开源的、基于内存的高性能键值存储数据库&#xff0c;它支持多种类型的数据结构。Redis 的数据结构类型和它们的底层实现是 Redis 强大功能和高效性能的基础。以下是 Redis 支持的主要数据结构类型以及其底层数据结构和原理&#xff1a; 基础数据结构 1. 字符串&…

【保姆级讲解Linux常见命令】

&#x1f308;&#x1f308;&#x1f308;&#x1f308;欢迎 &#x1f308;&#x1f308;&#x1f308; &#x1f389;&#x1f44d;点赞⭐评论⭐收藏&#x1f389; &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让…

[linux] Key is stored in legacy trusted.gpg keyring

修复 Ubuntu 中的 “Key is stored in legacy trusted.gpg keyring” 问题_key is stored in legacy trusted.gpg keyring (/etc/-CSDN博客 复制到trusted.gpd.d 目录中(快速但不优雅的方法) 如果你觉得手动做上面的事情不舒服&#xff0c;那么&#xff0c;你可以忽略这个警告…