Activity间中使用Intent传值
主页面用来输入一个值传入第二个页面显示,关闭第二个页面返回一个值
主页布局:
<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"
tools:context=".MainActivity" > <TextView
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="关闭第二个页面后返回值" /> <EditText
android:id="@+id/txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/view"
android:text="" />
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt"
android:text="转第二页" />
</RelativeLayout>
MainActivity,主要通过startActivityForResult来传递请求码,返回数据的时候,第二个页面调用Activity.setResult()方法设置返回Intent以及返回码,需要重写源Activity的onActivityResult()方法以便于接受返回的Intent,在onActivityResult()中会判断请求码和响应码
package com.example.android01; import android.os.Bundle;
import android.R.string;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { private final static String TAG="MainActivity";
private final static int REQUEST_CODE = 1;
private final static String CONTENT = "content";
private EditText txtEditText = null;
private Button btnButton = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtEditText = (EditText) this.findViewById(R.id.txt);
if (savedInstanceState != null && savedInstanceState.containsKey(CONTENT)) {
txtEditText.setText(savedInstanceState.getString(CONTENT) + "[2]");
}
btnButton = (Button) this.findViewById(R.id.btn);
btnButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
String str=txtEditText.getText().toString();
intent.putExtra("fromMain", str);
// startActivity(intent);
// 启动需要监听返回值的Activity,并设置请求码:requestCode
startActivityForResult(intent, REQUEST_CODE);
}
});
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onActivityResult(int, int,
* android.content.Intent)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 当otherActivity中返回数据的时候,会响应此方法
// requestCode和resultCode必须与请求startActivityForResult()和返回setResult()的时候传入的值一致。
if (requestCode == REQUEST_CODE && resultCode == SecondActivity.RESULT_CODE) {
Bundle bundle=data.getExtras();
String strResult = bundle.getString("result");
Log.i(TAG,"onActivityResult: "+ strResult);
Toast.makeText(MainActivity.this, strResult, Toast.LENGTH_LONG).show();
}
} /*
* (non-Javadoc) 保存Activity页面状态在onStop之前执行
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
String contentString = txtEditText.getText().toString();
outState.putString(CONTENT, contentString);
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
} }
每二个Activity
/**
*
*/
package com.example.android01; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; /**
* @author Administrator 2014-3-12 下午10:21:17
*/
public class SecondActivity extends Activity { private final static String TAG="MainActivity";
public final static int RESULT_CODE=1;
private Button btnBack = null;
private EditText txtContent = null;
private TextView viewContent = null; /*
* (non-Javadoc)
*
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity); txtContent = (EditText) this.findViewById(R.id.txtContent);
viewContent = (TextView) this.findViewById(R.id.viewContent);
btnBack = (Button) this.findViewById(R.id.btnBack); Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String strContentString = bundle.getString("fromMain");
Log.i(TAG,"SecondActivity: "+ strContentString);
viewContent.setText(strContentString);
btnBack.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.putExtra("result", txtContent.getText().toString());
setResult(RESULT_CODE, intent);// 设置resultCode,onActivityResult()中能获取到
finish();
}
});
} }
注意请求码与返回码的对应判断,因为可能有多个请求码与返回码。
Activity间中使用Intent传值的更多相关文章
- 在Activity之间使用Intent传值和Bundle传值的区别和方式
两者本质上没有任何区别.Bundle只是一个信息的载体 将内部的内容以键值对组织 Intent负责Activity之间的交互 自己是带有一个Bundle的Intent.putExtras(Bundle ...
- Activity以singleTask模式启动,intent传值的解决办法
转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/46557827 因为项目中,有一个消息推送的功能,每次推送一个消息,就会开启F ...
- Android中Intent传值与Bundle传值的区别详解
Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面 这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...
- 安卓笔记--intent传值不更新问题
今天在学习安卓的过程中,遇到一个问题,就是用intent进行多次传值的话, 他永远是第一次的值 后来发现,intent接收数据被写到了onCreat();方法中,这时候finish();到上一个Act ...
- Intent传值的学习
今天学习了Intent传值的过程,有点安卓编程经验的都知道,Intent可以实现页面的跳转,可以从一个activity跳转到另一个activity,这个名义上说是界面跳转,其实这句话现在觉得说的很不严 ...
- Android intent 传值不更新的原因和解决办法
当 Activity 的启动模式是 singleTask 或者 singleInstance 的时候.如果使用了 intent 传值,则可能出现 intent 的值无法更新的问题.也就是说每次 int ...
- Android学习之Activity跳转与传值
Activity跳转与传值,主要是通过Intent类,Intent的作用是激活组件和附带数据. 一.Activity跳转 方法一 Intent intent = new Intent(A.this, ...
- Activity: launchMode 和 Intent.FLAG_ACTIVITY_CLEAR_TOP
Activity 的 launchMode: 1. standard: 标准模式 这种启动模式为标准模式,也是默认模式.每当我们启动一个Activity,系统就会相应的创建一个实例,不管这个实例是否已 ...
- Activity之间使用intent传递大量数据带来问题总结
转载:大飞 http://blog.csdn.net/rflyee/article/details/47441405 Activity之间使用Parcel传递大量数据产生的问题. Activity ...
随机推荐
- hdu 3951 - Coin Game(找规律)
这道题是有规律的博弈题目,,, 所以我们只需要找出规律来就ok了 牛人用sg函数暴力找规律,菜鸟手工模拟以求规律...[牢骚] if(m>=2) { if(n<=m) {first第一口就 ...
- python if
根据用户从控制如输入数据,使用if语句实现用户登录功能 代码如下: name = "zy"password = "123"_name = input(" ...
- Quartz.net 定时调度时间配置格式说明与实例
格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 ...
- 算法:Astar寻路算法改进
早前写了一篇<RCP:gef智能寻路算法(A star)> 出现了一点问题. 在AStar算法中,默认寻路起点和终点都是N x N的方格,但如果用在路由上,就会出现问题. 如果,需要连线的 ...
- Java设计模式9:代理模式
代理模式 代理模式的定义很简单:给某一对象提供一个代理对象,并由代理对象控制对原对象的引用. 代理模式的结构 有些情况下,一个客户不想活着不能够直接引用一个对象,可以通过代理对象在客户端和目标对象之间 ...
- CSS Font知识整理总结
1.什么是字体 字体是文字的外在形式,就是文字的风格,是文字的外衣.比如行书.楷书.草书,都是一种字体.同样一个字每个人写起来都会有差异,可以说每个人都有一套潜在的字体库.对于web页面来说,字体就是 ...
- AtomineerUtils爆破过程记录
AtomineerUtils是国外的一款用于生成源代码注释的一款VS插件,官方网站:http://www.atomineerutils.com/products.php 通过链接,可以看出这款插件的功 ...
- 走进AngularJs(四)自定义指令----(中)
上一篇简单介绍了自定义一个指令的几个简单参数,restrict.template.templateUrl.replace.transclude,这几个理解起来相对容易很多,因为它们只涉及到了表现,而没 ...
- 我所理解的OOP——UML六种关系
最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱了,有时候也会尝试使用UML表示类之间的关系,但UML从毕业后就再也没接触过了,经常会被小伙伴儿们指出继 ...
- mongodb java spring data
关于如何集成spring-data-mongodb到项目中,已经有很多人介绍了,这里只给出几个链接. GETTING STARTED Accessing Data with MongoDB: http ...