前言:今天凌晨发布的一篇博客,醒来看看访问竟然有400多次,实在是莫大鼓励!
我感觉还是说的太官方,尽量通俗易懂一点吧,毕竟下面等会要贴代码了
- 2.1活动是啥子?
- 2.2活动基本用法
- 2.3使用Intent
- 2.4生命周期
- 2.5互动四大启动模式
- 2.6实践
- 2.7总结
(我尽量用我所认知的了解去解释这些东西)
一,活动是什么东西
我所理解的活动就是看到的页面Activity
二,活动基本用法
比如:第一章我说过的,
XML+JAVA+AndroidMainifest 这就是代码结构
(我只简单说下代码,XML部分等会补充)
一个负责页面,一个负责代码,一个负责配置清单这种常识就不必多说(跳转页面、涉及权限的必须要配置)
你还需要学会如下技能:
Toast提示(其实就是提示,也可以自定义漂亮的)
用途我我都不说了,手机很常见的
Toast.makeText(this, "提示内容", 0).show();
//上下文,提示内容,提示时间只有两种0/1代表长短 (半秒或者1秒)
Menu菜单(说白了就是“设置”选项,你)
你在xml文件中多写几个,就多几个选项
//现在是在Activity文件中:
@Override//一个Activity自动生成的方法,目的是创建菜单功能
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override//这是我自己重写的方法,监听菜单事件(对应menu文件夹下main.xml文件)
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Toast.makeText(this,"提示内容" , 1).show();
break;
}
return true;
}
全屏显示(没有顶部状态栏那种全屏)
requestWindowFeature(Window.FEATURE_NO_TITLE);
//就这一行代码,但是要写在加载页面的方法之前,也就是这个方法上面一行 setContentView()
销毁页面:
返回就是销毁,手动销毁就是
finish();方法,
这个我等会解释下安卓常见点击事件
安卓的点击事件五花八门
我只说常见的一种
/*Activity实现接口 android.view.View.OnClickListener别选错了
原理是:实现接口方法传参数,得到按钮并主持监听,然后判断点击事件,(应该都能看懂的)
*/
public class MainActivity extends Activity implements OnClickListener {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) findViewById(R.id.button1);//得到控件
button.setOnClickListener(this); //注册监听
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
//点击触发
break;
}
}
}
<!-- 默认的相对布局,w代表横向,h代表高度-, m代表占完,w代表用多少占多少懂->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
*三,研究下Intent
安卓各大组件连接的桥梁,不多解释
显示和隐式两种,其实我想说,再折腾一会我都要晕了,就是填转页面呗!
Intent跳转显示和隐式的理解?
效果相同,
显示配置Activity,跳转,
隐式配置别名,直接跳转别名,
Intent跳转基础版本
XML配置
<activity android:name="包名.类"/>
JAVA代码:
Intent intent=new Intent(本类.this,目标类名.class);
startActivity(intent);
Intent跳转隐式版本
XML配置
<activity android:name="com.example.app_home.C2_main">
<intent-filter>
<action android:name="自定义名字" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
JAVA代码
intent.setAction("配置文件中自定义的名字");
startActivity(intent);
配置清单 intent-filter中加入一行:
代码中就哟加入一行: intent.addCategory(“测试”);不然就会提示找不到,
可以看出隐士的 标签就是一个过滤器的存在
我会告诉你这个Intent能跳到浏览器,拨号盘 ,全是隐士意图的功劳
比如:跳浏览器百度主页
Intent intent=new Intent(Intent.ACTION_VIEW); //指明调用内置动作是view
intent.setData(Uri.parse("http://www.baidu.com")); //传入字符串解析成网址
startActivity(intent); //跳转
比如:跳拨号盘
Intent intent=new Intent(Intent.ACTION_DIAL); //指明调用内置动作dial
intent.setData(Url.parse("tel:10086")); //传入字符串解析成电话号码
startActivity(intent); //跳转
发短信打电话等等、、、不解释了
setData主要是指定我们操作的数据的一个方法
对应在配置文件中国的标签,
这个标签能干吗呢?
1.scheme 指定协议 比如http://
2.host 数据主机名,比如传入的网址www.baidu.com
3.port 端口
4.path 域名
5.tmimeType 类型
其实我也不明白,不过意思应该是就说哪个网址的规定要求,了解即可
*四,Intent传递数据
Intent是四大组件的纽带,传递数据的作用
1.Bundle的意义?
2.Intent传递对象?
首先看Intent的传递关系:
理论部分:
1.数据依靠于Intent传递数据
2.Intent依靠于Bundle当做数据包
Intent提供四种方法:
putExtras(Bundle data) //直接存入 数据包
getExtras(); //直接取出 数据包;
putExtra(String key,Xxx value) //以键值方式 存入数据
getXxxExtra(String name,Xxx defaultValue) //以指定key 取出数据
Bundle提供四种方法:
putXxx(String key, Xxx value) //以键值方式 存入数据
getXxx(String key, Xxx defalutValue ) //以指定key 取出数据
putSerializable(String key,Xxx defalutValue); //以键值方式存 可序列化的对象
getSerializable(String key) //以指定key取出 可序列号的对象
1.Bundle的意义是什么?
传递数据用Bundle和不用的区别:
//不用Bundle
intent.putExtra("id",str);
//用Bundle传递数据
Bundle bundle=new Bundle();
bundle.putString("id", str);
intent.putExtras(bundle);
这传递语法本身意义上是相同的:
那么可以理解为安卓为Intent提供了一种叫做Bundle封装机制,
写于不写它都是存在的,
所以:用不用Bundle传递效果都一样的
接收数据用不用Bundle的区别
//不用Bundle
Intent intent=getIntent();
String aa=intent.getStringExtra("id");
//用Bundle接收数据
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
String aa=bundle.getString("id");
这个代码中: 用Bundle 或者 不用Bundle都能接收到数据
所以: 用不用Bundle接受效果都一样的
总结:
Bundlle写不写都不是很重要了,那么Bundle代表的是封装的数据,
上面有两种传递,两种接收,完全可以混写的使用也毫无关系了!
主要:方便二次传递的时候我们可以直接传递Bundle即可
2.Intent 传递对象!
Intent可以传递值 可以传递对象,
比如传递一个封装的GetSet
intent.putExtra("id", new Beran("你好"));
或者用Bundle传递
Bundle bundle2=new Bundle();
bundle2.putSerializable("id",new Beran("你好"));
intent.putExtras(bundle2);
效果都是一样的,
直接取对象的写法
Intent intent2=getIntent();
Beran beran=(Beran) intent2.getSerializableExtra("id");
取Bundle再取对象也是一样的
Intent intent2=getIntent();
Bundle bundle=intent2.getExtras();
Beran beran=(Beran) bundle.getSerializable("id");
(有点晕了,过几天再更,看书太累)