1.认识android的Activity组件
Activity是什么
| 1.什么是Activity:Activity(活动)就是一个用于和用户交互的组件。 |
| 2.在实际的应用场景里面,比如一个拨打电话的界面就是一个Activity。 |
| 3.Activity是可以嵌套启动的。比如,你在拨打电话的界面可以选择编辑短信的功能,当你点击编辑短信的时候,跳至编辑短信的界面(短信是另一个交互的界面,就是另一个Activity)。 |
Activity绑定自定义视图
| 在 MainActivity中,有一个onCreate()方法(这里先不说明它的作用),其中有一个语句: |
| |
| setContentView(R.layout.activity_main); |
| 它的作用就是绑定一个视图界面。通过它你可以绑定自己想要的布局,而不一定是默认的布局页面。 |
启动一个Activity
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_main); |
| |
| |
| Button button = (Button) findViewById(R.id.startActivity); |
| |
| |
| button.setOnClickListener(new View.OnClickListener(){ |
| |
| @Override |
| public void onClick(View view) { |
| |
| Intent intent = new Intent(MainActivity.this,Main2Activity.class); |
| |
| startActivity(intent); |
| } |
| }); |
| |
| } |
2.Activity的生命周期
- onCreate():第一次创建的时候被调用。
- onStart():显示给前台调用。
- onResume():与用户进行交互的时候调用。
- onPause():暂停一个activity的时候调用。
- onStop():对用户不可见的时候调用。
- onRestart():重新显示的时候调用。
- onDestory():销毁activity的时候调用。
3.Activity之间传递参数
简单的数据传递
| 步骤:在主活动中,使用putExtra()方法输入要传递的数据,在第二个活动中用getStringExtra()方法接收(注意:这里的getStringExtra()是因为传递的是字符串,如果是其他类型,那么可以是其他的类似的接收方法)。 |
| button.setOnClickListener(new View.OnClickListener(){ |
| |
| @Override |
| public void onClick(View view) { |
| |
| Intent intent = new Intent(MainActivity.this,Main2Activity.class); |
| |
| intent.putExtra("data","这是被传递的数据"); |
| |
| startActivity(intent); |
| } |
| }); |
| |
| TextView textView = (TextView) findViewById(R.id.textView); |
| |
| |
| Intent intent = getIntent(); |
| String content = intent.getStringExtra("data"); |
| |
| textView.setText(content); |
传递数据包Bundle
MainActivity.java
| Intent负责activity的参数传递,现在暂时可以理解为通过Intent建立两个activity之间的跳转 |
| Intent intent = new Intent(MainActivity.this,Main2Activity.class); |
| Bundle bundle = new Bundle(); |
| bundle.putInt("age",1); |
| bundle.putString("name","leo"); |
| |
| intent.putExtras(bundle); |
| |
| startActivity(intent); |
Main2Activity.java
| // 获取textview |
| TextView textView = (TextView) findViewById(R.id.textView) |
| Intent intent = getIntent() |
| // 通过Bundle获取 |
| Bundle data = intent.getExtras() |
| // 设置让传递的数据显示在TextView里面 |
| // 注意最后的data.getString()方法,还可以设置本来没有的数据,其中的“man”对应的参数是默认值 |
| textView.setText(String.format("name=%s,age=%d",data.getString("name"),data.getInt("age"),data.getString("sex","man"))) |
| 除了上面的Bundle使用,还可以在主活动中用getExtra("名字",Bundle)来传递(上面用的是getExtras()),在接收的部分用getBundleExtra("名字"). |
MainActivity.java
| Intent负责activity的参数传递,现在暂时可以理解为通过Intent建立两个activity之间的跳转 |
| Intent intent = new Intent(MainActivity.this,Main2Activity.class); |
| Bundle bundle = new Bundle(); |
| bundle.putInt("age",1); |
| bundle.putString("name","leo"); |
| |
| intent.putExtra("data",bundle); |
| |
| startActivity(intent); |
Main2Activity.java
| 获取textview |
| TextView textView = (TextView) findViewById(R.id.textView) |
| Intent intent = getIntent() |
| // 通过Bundle获取 |
| Bundle data = intent.getBundleExtra("data") |
| // 设置让传递的数据显示在TextView里面 |
| // 注意最后的data.getString()方法,还可以设置本来没有的数据,其中的“man”对应的参数是默认值 |
| textView.setText(String.format("name=%s,age=%d,sex=%s",data.getString("name"),data.getInt("age"),data.getString("sex","man"))) |
和intent传值相比,Bundle传递数据更加简洁。具体的使用需要结合实际的场景来理解。
传递值对象
值对象:自定义,有数据结构的对象
1.采用Serializable的方式(序列化的方式)
创建一个自定义的对象:
| |
| public class user implements Serializable { |
| String name ; |
| int age; |
| |
| |
| |
| |
| public String getName() { |
| return name; |
| } |
| |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| public int getAge() { |
| return age; |
| } |
| |
| public void setAge(int age) { |
| this.age = age; |
| } |
| |
| public user(String name , int age){ |
| this.name = name; |
| this.age = age; |
| } |
| } |
MainActivity.java
| Intent负责activity的参数传递,现在暂时可以理解为通过Intent建立两个activity之间的跳转 |
| Intent intent = new Intent(MainActivity.this,Main2Activity.class); |
| |
| intent.putExtra("User", (Serializable) new user("张三",15)); |
| |
| startActivity(intent); |
Main2Activity.java
| TextView textView = (TextView) findViewById(R.id.textView) |
| Intent intent = getIntent() |
| user u = (user) intent.getSerializableExtra("User") |
| |
| textView.setText(String.format("User Info(name = %s,age = %d)",u.getName(),u.getAge())) |
传递数据
1.startActivityForResult()
startActivityForResult()方法相比于startActivity()就是可以接收返回的一个参数(数据)。两者都是启动Activity的方法。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)