Android开发学习之路--Activity之Intent
窗外再次飘起了小雪,还有1周就过年了,2016年即将到来,来年不知道自己将身处何处,船到桥头自然直吧。还是继续学习吧,上次学习了Activity,那么如果是两个Activity之间,怎么从一个Activity切换到另外一个Activity呢?那便是Intent,intent中文的意思就是意图,目的的意思。也就是从个一个Activity到另一个Activity了。下面就来个例子比较直观吧。
接着上次的学习,首先再新建一个Activity:
新建Activity,命名为SecondActivity并自动生成layout为activity_second:
然后添加一个Button,命名为Button2,如下图所示:
修改代码去处标题栏:
package com.example.jared.activitystudy; import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class SecondActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
setContentView(R.layout.activity_second);
}
}
在AndroidManifest.xml中添加Activity,其实在创建空的Activity的时候,软件已经为我们添加了。
<activity android:name=".SecondActivity"></activity>
Intent的方式有两种,一种是显式的方式,一种是隐式的方式,先看下显式的方式。这里看下Intent的官方文档就有说明,构造函数Intent,其中packageContext是提供一个启动活动的上下文,cls是要启动的活动的class。
public Intent (Context packageContext, Class<?>
cls)
参数是一个Intent,说了这些听着也不明白,还是来个例子明白。
package com.example.jared.activitystudy; import android.content.Intent;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; public class FirstActivity extends AppCompatActivity { private Button button; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
setContentView(R.layout.activity_first); button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(FirstActivity.this, "Button1 is clicked!!",
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
}
这里先定义了Button,然后通过findViewById来指定button1,然后调用setOnClickListener来监听这个button的事件。其中的Toast主要是用来显示一下小通知给用户的。
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.jared.activitystudy.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
</intent
然后在FirstActivity代码中添加如下:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(FirstActivity.this, "Button1 is clicked!!",
Toast.LENGTH_SHORT).show(); //Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Intent intent = new Intent("com.example.jared.activitystudy.ACTION_START");
startActivity(intent);
}
});
如上Intent传入了这个action,然后在AndroidManifest中也添加了同样的action,而category是DEFAULT的,所以这样就实现了Intent的功能。如果定义自己的category,那么修改代码如下:
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.jared.activitystudy.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.jared.activitystudy.MY_CATEGORY"/>
</intent-filter>
</activity>
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(FirstActivity.this, "Button1 is clicked!!",
Toast.LENGTH_SHORT).show(); //Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Intent intent = new Intent("com.example.jared.activitystudy.ACTION_START");
intent.addCategory("com.example.jared.activitystudy.MY_CATEGORY");
startActivity(intent);
}
});
运行代码如上面的显式的方式一样的效果,这里就不再添图了。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(FirstActivity.this, "Button1 is clicked!!",
Toast.LENGTH_SHORT).show(); Intent intent = new Intent("Intent.ACTION_VIEW");
intent.setData(Uri.parse("http://blog.csdn.net/eastmoon502136"));
startActivity(intent);
}
});
这里的ACTION_VIEW是android系统的内置动作。Uri.parse()的方法,将网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个对象传递进去。然后运行程序,点击button显示如下:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(FirstActivity.this, "Button1 is clicked!!",
Toast.LENGTH_SHORT).show(); Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
});
运行后,点击button按钮显示如下:
关于隐式的Intent就介绍到这里了,其他的可以参考android官方的文档。
比如我第一个Activity里面填写了一些信息,要在另一个Activity中用到,那么怎么才能把信息从第一个Activity传递到第二个Activity中呢?当然这里还是需要用到Intent了。
这里还是以例子来得实际吧,依然继承上面的代码,这里用putExta方法来实现。首先在FirstActivity中添加代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(FirstActivity.this, "Button1 is clicked!!",
Toast.LENGTH_SHORT).show();
String data = "I am from FirstActivity";
String name = "exta_data";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra(name, data);
startActivity(intent);
}
});
这里的putExta需要两个参数,一个是名字,一个是数据。这里名字定义为:exta_data,数据就根据需求了。好了既然这个FirstActivity代码已经写完了,那么接收端SecondActivity就需要处理数据了。为了能在SecondActivity中显示,顾这里在activity_second.xml中添加一个textview(之后添加控件就不多做说明了):
添加完后我们再回到SecondActivity中来编写接收到的数据并显示的代码:
public class SecondActivity extends AppCompatActivity {
private TextView textview; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
setContentView(R.layout.activity_second); String name = "exta_data";
Intent intent = getIntent();
String data = intent.getStringExtra(name);
textview = (TextView)findViewById(R.id.exta_data);
textview.setText(data);
}
}
这里定义了TextView,通过findViewById来获取exta_data这个textview,然后通过intent的getStringExta(如果传入的是int类型,那么就用getIntExta方法,其他类似)来获取传递过来的数据,通过textview的setText来显示接收到的数据,运行结果如下:
那么如果按了back按键,SecondActivity的数据能传递回给FirstActivity呢?答案是肯定的。那么我们还是来测试下吧:
首先也为FirstActivity添加个textview:
这里和SecondActivity的类似,然后修改SecondActivity代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = "return_data";
String data = "I am from SecondActivity";
Intent intent1 = new Intent();
intent1.putExtra(name, data);
setResult(RESULT_OK, intent1);
finish();
}
});
这里实例化一个intent1,传入name为return_data,数据自定义。然后通过setResult方法来回调给FirstActivity,这里调用finish主要是为了销毁SecondActivity使FirstActivity在栈顶,其中RESULT_OK是返回值,还有RESULT_CANCELED。
接着就是修改FirstActivity的代码了。替换startActivity方法如下,这个方法是有返回值,并且能在onActivityResult方法中回调的。
startActivityForResult(intent, 1);
然后就是在onActivityResult方法中实现了:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
if(resultCode == RESULT_OK) {
String name = "return_data";
String returnData = data.getStringExtra(name);
textView = (TextView)findViewById(R.id.return_data);
textView.setText(returnData);
}
break;
default:
}
}
其中的名字和SecondActivity对应,运行显示如下:
好了,关于Intent差不多就学习到这里了。
Android开发学习之路--Activity之Intent的更多相关文章
- Android开发学习之路--Activity之初体验
环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...
- Android开发学习之路--Activity之四种启动模式
后天终于可以回家了,马上就要过年了,趁着年底打酱油的模式,就多学习学习,然后记录记录吧.关于Activity已经学习了七七八八了,还有就是Activity的四种启动模式了,它们分别为,standard ...
- Android开发学习之路--Activity之生命周期
其实这篇文章应该要在介绍Activity的时候写的,不过那个时候还不怎么熟悉Activity,还是在这里详细介绍下好了.还是参考下官方文档的图吧: 从上面的流程,我们可以看出首先就是打开APP,开始执 ...
- Android开发学习之路--基于vitamio的视频播放器(二)
终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发学习之路--Android Studio cmake编译ffmpeg
最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...
- Android开发学习之路--网络编程之xml、json
一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...
- Android开发学习之路--Android系统架构初探
环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...
- Android开发学习之路--MAC下Android Studio开发环境搭建
自从毕业开始到现在还没有系统地学习android应用的开发,之前一直都是做些底层的驱动,以及linux上的c开发.虽然写过几个简单的app,也对android4.0.3的源代码做过部分的分析,也算入门 ...
随机推荐
- Linux设备树语法详解【转】
转自:http://www.cnblogs.com/xiaojiang1025/p/6131381.html 概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离.在设备 ...
- JS 实现点击页面任意位置隐藏div、span
通过调用下面的 showhidden(“标签ID”) 显示div/span/…等标签内容,可以实现点击页面任意地方再次隐藏该标签内容,而showhidden(“标签ID”,”nohidden”)可保存 ...
- Spring AOP @Around @Before @After 区别
此段小代码演示了spring aop中@Around @Before @After三个注解的区别@Before是在所拦截方法执行之前执行一段逻辑.@After 是在所拦截方法执行之后执行一段逻辑.@A ...
- 18. 4Sum(中等)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...
- 数据库4m10d作业
Create table student ( Sno char(15) primary key , Sname varchar(10) not null, Sage tinyint , Special ...
- 嫌我的键盘的backspace太小,就尝试了一下改键工具--keyTweak
KeyTweak是一个很简单的键盘remap小工具,主要功能就是可以让我们选择某个按键并重新赋予该按键一个新的功能.如果哪天你的键盘某个重要的键坏掉了,可以通过这个免费的软件来重新定义该按键的功能.譬 ...
- 这交互炸了(四) :一分钟让你拥有微信拖拽透明返回PhotoView
本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发 <交互炸了>或许是一系列高端特效教程, 文中会介绍一些比较炫酷的特效,以及实现的思路.特效实现本身也许不会有太大的难度 ...
- OC基础之可循环滚动并突出中间图片,并且可点击
前两天一哥们儿让我帮他写一下:可循环滚动并突出中间图片,并且可点击的一种滑动视图的效果,今天放在这里给大家展示一下,具体文字代码中都有注解,代码还有待完善,不喜勿喷,转载请注明,下载请点星,谢谢~ - ...
- MyEclipse中查看struts_spring_hibernate源码
1.spring查看源码 首先下载对应的源码包 如:spring-framework-2.5.6-with-dependencies.zip 打开spring-framework-2.5.6\di ...