第八章:Android中Intent的用法及注意事项
来源:互联网 发布:隐形眼镜推荐 知乎 编辑:程序博客网 时间:2024/06/16 05:17
我们今天就借助一个例子,来谈谈Intent的用发及注意事项。
我们今天的目标就是实现从一个Activity跳转到另外一个Activity,实现一个Activity含参跳转到另外一个Activity,实现一个工程的Activity跳转到其他工程的Activity。
下面我们先说一下核心代码:
Intent跳转:
Intent intent = new Intent();intent.setClass(MainActivity.this, SumActivity.class);
<pre name="code" class="java">MainActivity.this.startActivity(intent);
Intent含参跳转:
Intent intent = new Intent();intent.putExtra(name, value);intent.setClass(MainActivity.this, SumActivity.class);MainActivity.this.startActivity(intent);
下面我们看一个实例
这个实例那就是在第一个Activity输入两个数,这两个数可以进行加减乘除的运算,然后把结果传递给下一个Activity,下一个Activity有一个Button,点击后可以回到第一个Activity,第二个Activity再定义一个Button,点击之后可以跳转到Android的发短信的Activity,可以实现发短信的活动,这就是我的思路,下面我们就来看下具体实现方法,我的所有点击事件用的都是匿名内部类,需要Java有一定的基础。
首先我们先创建工程SimpleCalc03,包名是一个Android项目的唯一标识,并且包名一般都是域名,公司名,项目名来命名,我这里定义包名为cn.edu.hpu.acm.simplecalc03.
工程创建好,就有一个默认的MainActivity(我这里是),由于我们需要从一个Activity跳转到另外一个Activity,所以我们需要再创建一个Activity,点击Android唯一标识,new/Other,找到AndroidActivity,建立OtherActivity,自动生成android_other.xml文件。
我们先打开String.xml文件,在里面定义需要使用到的汉字。
代码如下:
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><resources> <span style="white-space:pre"></span><string name="app_name">简单计算器</string> <span style="white-space:pre"></span><string name="action_settings">Settings</string> <span style="white-space:pre"></span><string name="hello_world">Hello world!</string> <span style="white-space:pre"></span><string name="title_activity_other">OtherActivity</string><string name="firstTextView">请输入第一个数</string><string name="secondTextView">请输入第二个数</string><string name="sum">加法</string><string name="sub">减法</string><string name="mul">乘法</string><string name="div">除法</string><string name="resultTextView">计算结果为</string><string name="back">返回</string><string name="exit">退出</string><string name="about">关于</string><string name="sms">发短信</string></resources>
这些就是我们一会需要用到的一些汉字,在Android中,所有的汉字,注意是所有的,都要写到string.xml文件中,这样可以实现我们程序的国际化,注意,程序国际化。有些时候,甚至可以吧所有的颜色定义比如红色(#FF0000)都定义string.xml文件中,这些是国际化程序的统一标准。
string.xml写好后,我们首先要实验布局,这里采用整体垂直线性布局,局部水平线性布局。
首先我们需要实现activity_main.xml的布局
代码如下:
如此,MainActivity的布局文件就写好了,下面我们看一下效果:
<!--定义整体为垂直线性布局,并且宽为充满整个父元素,高为充满整个父元素 --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 定义TextView显示控件,并指定它的Id和显示内容,指定它的宽为充满父元素, 高为包裹住元素内容 --> <TextView android:id="@+id/firstTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/firstTextView"/> <!-- 定义第一个输入框,并指定它的Id,指定它的宽为充满父元素, 高为包裹住元素内容 --> <EditText android:id="@+id/number1" android:layout_width="match_parent" android:layout_height="wrap_content"/> <!-- 定义TextView显示控件,并指定它的Id和显示内容,指定它的宽为充满父元素, 高为包裹住元素内容 --> <TextView android:id="@+id/secondTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/secondTextView"/> <!-- 定义第二个输入框,并指定它的Id,指定它的宽为充满父元素, 高为包裹住元素内容 --> <EditText android:id="@+id/number2" android:layout_width="match_parent" android:layout_height="wrap_content"/> <!-- 定义局部线性布局,定义方向是水平方向,指定它的宽为充满父元素, 高为包裹住元素内容 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_gravity="center"> <!-- 定义第一个按钮,指定按钮的显示内容,指定它的宽、高,分别为 包裹住它的宽、高,指定它的Id --> <Button android:id="@+id/sum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sum"/> <!-- 定义第二个按钮,指定按钮的显示内容,指定它的宽、高,分别为 包裹住它的宽、高,指定它的Id --> <Button android:id="@+id/sub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sub"/> <!-- 定义第三个按钮,指定按钮的显示内容,指定它的宽、高,分别为 包裹住它的宽、高,指定它的Id --> <Button android:id="@+id/mul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/mul"/> <!-- 定义第四个按钮,指定按钮的显示内容,指定它的宽、高,分别为 包裹住它的宽、高,指定它的Id --> <Button android:id="@+id/div" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/div"/> </LinearLayout></LinearLayout>
如此,MainActivity的布局文件就写好了,下面我们看一下效果:
这就是MainActivity布局文件生成的效果,
下面我们再为OtherActivity定义布局文件
activity_other.xml的代码如下:
<!-- 定义整体为垂直线性布局,并且宽为充满整个父元素,高为充满整个父元素 --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 定义TextView显示控件,并指定显示内容,指定它的宽为充满父元素, 高为包裹住元素内容 --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/resultTextView"/> <!-- 定义TextView显示控件,指定其Id,并指定它的宽为充满父元素, 高为包裹住元素内容 --> <TextView android:id="@+id/result" android:layout_width="match_parent" android:layout_height="wrap_content"/> <!-- 定义返回按钮,点击可以再次跳转到MainActivity --> <Button android:id="@+id/back" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/back"/> <!-- 定义按钮,点击可以跳转到Android自带发短信Activity --> <Button android:id="@+id/sms" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/sms"/></LinearLayout>
下面我们为MainActivity.java定义点击事件及一些方法,
代码如下:
package cn.edu.hpu.acm.simplecalc03;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {//声明所需变量private EditText number1;private EditText number2;private Button sum;private Button sub;private Button mul;private Button div; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //通过Id得到4个按钮的值 sum = (Button) findViewById(R.id.sum); sub = (Button) findViewById(R.id.sub); mul = (Button) findViewById(R.id.mul); div = (Button) findViewById(R.id.div); //用匿名内部类为sum按钮添加点击事件 sum.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = sum() + "";Intent intent = new Intent();intent.putExtra("result", result);intent.setClass(MainActivity.this, OtherActivity.class);MainActivity.this.startActivity(intent);}}); //用匿名内部类为sub按钮添加点击事件 sub.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = sub() + "";Intent intent = new Intent();intent.putExtra("result", result);intent.setClass(MainActivity.this, OtherActivity.class);MainActivity.this.startActivity(intent);}}); //用匿名内部类为mul按钮添加点击事件 mul.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = mul() + "";Intent intent = new Intent();intent.putExtra("result", result);intent.setClass(MainActivity.this, OtherActivity.class);MainActivity.this.startActivity(intent);}}); //用匿名内部类为div按钮添加点击事件 div.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = div() + "";Intent intent = new Intent();intent.putExtra("result", result);intent.setClass(MainActivity.this, OtherActivity.class);MainActivity.this.startActivity(intent);}}); } //定义get方法得到一个值,并转换为float类型 public float getNumber1(){ number1 = (EditText) findViewById(R.id.number1); String firstStr = number1.getText().toString(); return Float.parseFloat(firstStr); } //定义get方法得到第二个值,并转换为float类型 public float getNumber2(){ number2 = (EditText) findViewById(R.id.number2); String secondStr = number2.getText().toString(); return Float.parseFloat(secondStr); } //定义加法运算 public float sum(){ return getNumber1()+getNumber2(); } //定义减法运算 public float sub(){ return getNumber1()-getNumber2(); } //定义乘法运算 public float mul(){ return getNumber1()*getNumber2(); } //定义除法运算 public float div(){ if(getNumber2()==0){ return 0; }else{ return getNumber1()/getNumber2(); } } //覆写onCreateOptionsMenu方法,定义菜单选项 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. //覆写add()方法,其中第一个参数设置为0,第二个参数为Id,第三个参数为显示位置 //第四个参数为显示内容,这里通过R.string.*找到 menu.add(0, 1, 1, R.string.exit); menu.add(0, 2, 2, R.string.about); return super.onCreateOptionsMenu(menu); } //覆写onOptionsItemSelected方法,@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stub//如果Id==1(1为前面设置的退出菜单的按钮Id)调用finish();方法退出程序if(item.getItemId()==1){finish();}return super.onOptionsItemSelected(item);} }
然后我们写OtherActivity.java的方法,
代码如下:
package cn.edu.hpu.acm.simplecalc03;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class OtherActivity extends Activity {//声明属性private TextView result;private Button back;private Button sms;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_other);//通过Id得到值result = (TextView) findViewById(R.id.result);back = (Button) findViewById(R.id.back);sms = (Button) findViewById(R.id.sms);//实例化Intent对象Intent intent = getIntent();//得到从MainActivity传过来的值String value = intent.getStringExtra("result");//设置TextView显示文本的值(就是布局文件第二个TextView,没有设置显示内容的那个)result.setText(value);//为back按钮定义点击事件back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//实例化Intent对象Intent intent = new Intent();//定义从当前Activity,跳转到需要跳转到的Activity//后缀当前就为.this,需要跳转到的就为.classintent.setClass(OtherActivity.this, MainActivity.class);//开始Activity意图OtherActivity.this.startActivity(intent);}});sms.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//接受者的手机号,smsto:是uri的识别头部Uri uri = Uri.parse("smsto://0800000123");Intent intent = new Intent(Intent.ACTION_SENDTO, uri);//第二个参数就是将要发送的信息内容intent.putExtra("sms_body", "The SMS Text");startActivity(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.other, menu);return true;}}如此就完成了从一个Activity到另外一个Activity的传值和非传值的跳转,以及从一个app的Activity到另外一个app的Activity的跳转。
由于我是用的真机测试,所以无法弄到测试截图,大家可以把代码照搬回去,自己测试一下。
0 0
- 第八章:Android中Intent的用法及注意事项
- android 中Intent 的用法
- Android中Intent的用法
- Android中Intent的用法
- 【Android】Android中Intent的用法总结
- android imeOptions的用法及注意事项
- Android中Activity.onNewIntent(Intent intent) 的用法
- Android中关于Intent filter和Intent的一些用法。
- Android开发中Intent的具体用法
- Android 中Intent的几种用法
- Android中Intent的用法介绍
- android中Intent的用法总结
- Android中Intent的详细用法
- Android开发中intent的基础用法
- Android中Intent的匹配规则和注意事项
- Android Intent的用法
- Android Intent的用法
- Android中Intent用法总结
- HTML5 canvas标签
- 2、C语言和设计模式(继承、封装、多态)
- STL hash_map使用
- Python 函数式编程和面向对象编程等(进阶)
- C++运算符 转换
- 第八章:Android中Intent的用法及注意事项
- JFinal 极速开发
- Immunity Debugger PyCommands
- 20150803-UDP
- Eclipse常用快捷键
- Android四大组件之BroadcastReceiver
- hdu Problem-1242 最基础的BFS
- 10道C++输出易错笔试题收集
- 新手练习,判断一个年份是否是闰年