Activity应该知道的一切(2)

本文介绍如何在Android Activity中实现菜单的使用、数据的传递及返回。包括创建菜单布局、使用Intent进行数据传递、以及如何从一个Activity返回数据到另一个Activity。

    在Activity应该知道的一切(1)中简单的了解了一下Activity的概念和方法,接下来继续深入学习Activity!

    1、充分利用界面-菜单Menu的使用

    手机屏幕的大小毕竟有限,因此充分的使用界面进行操作就显得格外重要。为了不在界面中显示过多的固定的控件操作,可以将一些操作功能放在菜单Menu中,当需要使用的时候显示出来,不需要的时候折叠隐藏起来。

    首先,创建菜单布局,如图:

    1.在res中创建菜单目录文件夹menu

    

    

    2.在菜单文件夹中创建菜单布局menu_main.xml

    

    

    3.在菜单布局中添加菜单条目item,必须声明属性id与标题title

    

    其次,在MainActivity中重写onCreateOptionsMenu()方法

    

    在此方法中,把编写的布局资源填充进menu对象中,需要使用菜单填充器对象MenuInflater,在Activity中提供了获取该类对象的方法。

    

    利用填充器,把定义的资源文件加载进Menu对象中,如图:

    

    此时重新编译代码,启动程序,如图:

     

    然后,给菜单选项添加点击监听事件,重写onOptionsItemSelected()

    

    判断选中的item

    

    在方法中处理相应的逻辑即可,比如跳转Activity。

    2、传递数据到下一个Activity

    需求:从MainActivity中传递数据到SecondActivity,并且在SecondActivity中接收传递的数据并打印出来。

    在Activity之间进行跳转时,有时需要传递一些数据,数据传递的方式有很多,使用Intent可以传递一些简单的数据。在跳转Activity时使用Intent,同时Intent可以携带一些简单的数据。

    首先,数据的传递

    

    可以看到,通过Intent对象的putExtra(String name,value)方法可以设置一些简单的数据,其中name是标识数据的名称,value是传递的具体数据,如图:

    

    其次,数据的接收

    上一步把数据通过Intent对象传递到SecondActivity中,那么怎样在SecondActivity中获取由MainActivity传递的数据呢?数据被存入到了Intent对象中,因此要想在SecondActivity中获取传递的数据,必须先获取传递的Intent,然后从Intent中取出数据。Activity提供了获取传递意图的方法,如图:

    

    常用方法6 getIntent()返回上一个Activity传递的Intent对象。

    既然获取到了Intent对象,就可以通过intent获取传递了数据了,如图:

    

    由于上一个Activity传递的是字符串,因此此处用getStringExtra()获取,相应类型使用相应方法即可,编译运行如图:

    

    3、返回数据到上一个Activity

    需求:在MainActivity中接收SecondActivity关闭时返回的数据

    前面进行activity之间的跳转使用的是startActivity()方法,其实还可以使用startActivityForResult()方法,此方法还可以接收返回的数据。

    首先,在MainActivity跳转SecondActivity时使用startActivityForResult()方法

    

    其次,在MainActivity重写OnActivityResult()方法

    

    然后,在关闭SecondActivity时,返回数据

    

    最后,在MainActivity的onActivityResult()中接收数据并打印

    

    编译代码并运行

    

你问得非常好!你说:“**因为这个不是 MainActivity,我不知道有没有影响**”,这是一个非常合理的问题。 ✅ 简短回答:**没有影响!** --- ## ✅ 不管是 `MainActivity` 还是 `RoutePlanActivity`,只要它是 Activity,就能正常打印日志、运行代码! ### 🔍 举个例子: - `MainActivity.java` → 主页面(比如启动页) - `RoutePlanActivity.java` → 公交路线页面 它们都是 **Activity**,就像两个不同的房间: - 你在哪个房间说话(打日志),就在哪个房间听到 - 只要你进的是 `RoutePlanActivity` 这个房间,`Log.d()` 就会正常工作 --- ## ✅ 关键问题:你怎么进入 `RoutePlanActivity`? 通常有两种方式: | 方式 | 说明 | |------|------| | ✅ 1. 从 MainActivity 点按钮跳转 | 比如点“查公交”进入 | | ✅ 2. 它是启动页(Launcher Activity) | 直接打开 App 就进来了 | 👉 所以你要确认:**你现在运行 App 时,是否真的进入了 `RoutePlanActivity`?** --- ## ✅ 如何验证你进入了 `RoutePlanActivity`? 我们用一个最简单的办法:**加一条 Log 和一个 Toast** ### ✅ 第一步:在 `onCreate` 最开头加这两行 ```java // 打印日志(Android Studio 能看到) Log.d("AAA", "🎉 RoutePlanActivity 已启动!"); // 弹出提示(手机上能看到) Toast.makeText(this, "进入了 RoutePlan 页面", Toast.LENGTH_LONG).show(); ``` > 💡 把这两行放在 `setContentView(R.layout.activity_route_plan);` 前面或后面都可以 ### ✅ 第二步:运行 App - 如果你看到手机弹出了 “进入了 RoutePlan 页面” - 并且在 Logcat 中看到了 `🎉 RoutePlanActivity 已启动!` ✅ 那就说明你确实进来了,一切正常! --- ## ❌ 如果没看到上面的结果? ### 可能原因 1:你运行的是别的 Activity(比如 MainActivity) 👉 解决方法: 长按 ▶️ Run 按钮 → 看看是不是运行了 `MainActivity`? 你应该改成运行 `RoutePlanActivity`。 #### ✅ 修改默认启动的 Activity(可选) 打开 `app/src/main/AndroidManifest.xml`,找到这段: ```xml <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".RoutePlanActivity" /> ``` 如果你想让 App 一打开就进 `RoutePlanActivity`,可以改一下: ```xml <!-- 删除 LAUNCHER --> <activity android:name=".MainActivity"> </activity> <!-- 加上 MAIN + LAUNCHER --> <activity android:name=".RoutePlanActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` 保存后重新运行,就会直接打开你的公交页面了 ✅ --- ## ✅ 总结:你现在只需要做一件事 ### 🧩 操作清单 | 步骤 | 内容 | |------|------| | 1️⃣ | 打开 `RoutePlanActivity.java` | | 2️⃣ | 在 `onCreate` 最前面加上: ```java Log.d("AAA", "🎉 RoutePlanActivity 启动了!"); Toast.makeText(this, "正在加载公交路线...", Toast.LENGTH_SHORT).show(); ``` | | 3️⃣ | 运行 App | | 4️⃣ | 看手机有没有弹窗,看 Logcat 有没有 AAA 日志 | --- ### 📎 示例完整代码片段 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 👇 加这两行 Log.d("AAA", "🎉 RoutePlanActivity 启动了!"); Toast.makeText(this, "正在加载公交路线...", Toast.LENGTH_SHORT).show(); setContentView(R.layout.activity_route_plan); // ... 其他初始化代码 } ``` --- ## ✅ 成功标志 当你看到: - 手机弹出:“正在加载公交路线...” - Logcat 显示:`D/AAA: 🎉 RoutePlanActivity 启动了!` ✅ 说明你已经成功进入这个页面,接下来的所有调试都有效! --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值