`

Activity之间的传值

 
阅读更多

Activity之间的传值:

 

方法1: 1给2传值

Activity1:

 

		final Intent intent = new Intent(mCtx,Activity1.class) ;
		//将当前用户传递下去
		intent.putExtra("user", mUser);
		startActivity(intent);

 里边mUser是一个对象,传的事实上是一个Map,"user"是对象mUser的key

 

 

Activity2:

 

 

 mUser = (User) getIntent().getSerializableExtra("user");

 

 

mUser是对象,getIntent()是Activity的方法,值得注意的是得到的mUser 不是引用,而是new了一个对象并赋值,如果这东西要回传的话,要startActivity(intent);就会很SB。

所以用方法2

 

------------------------------------------------------------------------------------

 

方法2:

 

Activity1:

 

 

			intent.setClass(mCtx, Activity2.class);
			intent.putExtra("user", mUser);
			startActivityForResult(intent, 1);

 

 并且在Activity1中

 

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		
		
		super.onActivityResult(requestCode, resultCode, data);
		
		if(resultCode==1 || data.getSerializableExtra("putUserbyhua")!=null)
			mUser=(User) getIntent().getSerializableExtra("putUserbyhua");
	}
 

 

 

Activity2:

 

获取传来的值

 

 

mIntent = getIntent() 
mUser=(User) mIntent.getSerializableExtra(UserConst.USER_DATA);

 

在按返回键时跳转到1

 

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		
		 if(keyCode == KeyEvent.KEYCODE_BACK){
				final Intent intent=new Intent();
				intent.setClass(mCtx, Activity2.class);
				intent.putExtra("putUserbyhua",mUser);
				this.setResult(1);
				this.finish();
			
		 }
		return super.onKeyDown(keyCode, event);
	}
 

 

分享到:
评论
14 楼 doloveme 2011-05-20  
现在好了,有代码了
13 楼 doloveme 2011-05-20  
amaker8 写道
LZ上个能运行的实例。。。


哦,刚看懂,我一会上一个,呵呵
12 楼 doloveme 2011-05-20  
amaker8 写道
LZ上个能运行的实例。。。


你这是肯定句,疑问句,还是反问句啊
11 楼 amaker8 2011-05-19  
LZ上个能运行的实例。。。
10 楼 doloveme 2011-05-17  
<div class="quote_title">doloveme 写道</div>
<div class="quote_div">
<p style="text-align: center;"><span style="background-color: #888888;"><span style="font-size: medium;">Android中Activity共享变量的另一方法:Application context:</span></span></p>
<p> 多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。
  如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
 </p>
<p> 新建一个类,继承自Application</p>
<p> </p>
<p> </p>
<pre name="code" class="java"> class MyApp extends Application {
  private String myState;
  public String getState() {
  return myState;
  }
  public void setState(String s) {
  myState = s;
  }
  }

  </pre>
<p> </p>
<p> </p>
<p> </p>
<p><span style="border-collapse: collapse; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">在AndroidManifest.xml的application加个name属性就可以了,如下面所示:<br><br>  android:name=".MyApp" android:icon="@drawable/icon"<br>  android:label="@string/app_name"&gt;</span></p>
<p> </p>
<p><span style="border-collapse: collapse; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">使用时:</span><span style="border-collapse: collapse; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;"><span style="color: #ff0000;">(这个是重点)</span></span></p>
<p> </p>
<p> </p>
<pre name="code" class="java"> class Blah extends Activity {

@Override
  public void onCreate(Bundle b){
  ...
  MyApp appState = ((MyApp)getApplicationContext());
  String state = appState.getState();
  ...
  }
  }
  class Blah extends
  Activity {
  @Override
  public void onCreate(Bundle b){
  ...
  MyApp appState = ((MyApp)getApplicationContext());
  String state = appState.getState();
  ...
  }
  }</pre>
 
<p> </p>
<p> </p>
<p> </p>
<p><span style="color: #ff0000; font-size: medium;">当然搞个单例也可以啊,呵呵,以后研究</span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="color: #ff0000; font-size: x-large;">事实上 application就是一种他妈的单例</span></p>
<p> </p>
</div>
<p> </p>
9 楼 doloveme 2011-05-17  
jstl1point0 写道
application 共享很不错。


是的,给人一种一气呵成的感觉,不然会穿一堆特别sb的变量而且,会有修改的先后之分。

但是不知道application对于bean修改权限什么的,有没有逻辑上的安全隐患啊
8 楼 doloveme 2011-05-17  
myyuren 写道
我遇到了一个这方面的问题,还请楼主解答。
http://topic.csdn.net/u/20110513/14/6b948267-4a2f-4f0d-9318-8f6e685bb5d8.html
这是连接。
activity A 跳向 activity B 时,传递一个List<对象> 出现黑屏现 象,有网友说是oncreate事件加载过多数据,list.size()==500左右的时候就开始黑屏。



这个我不大清楚,跳转和传数据应该是不同的线程吧,如果页跳过去了,数据还没传完,而数据和页面信息相关性很大,应该会出现这种情况,或者也是android的bug.应该加入同步支持,你可以试验一下,呵呵
7 楼 doloveme 2011-05-17  
xucm1986 写道
application的生命周期知道哪为大虾可以指点下,在下不身感激


从程序开始,到结束
6 楼 xucm1986 2011-05-17  
application的生命周期知道哪为大虾可以指点下,在下不身感激
5 楼 xucm1986 2011-05-17  
我们一直都用application
4 楼 jstl1point0 2011-05-16  
application 共享很不错。
3 楼 myyuren 2011-05-16  
我遇到了一个这方面的问题,还请楼主解答。
http://topic.csdn.net/u/20110513/14/6b948267-4a2f-4f0d-9318-8f6e685bb5d8.html
这是连接。
activity A 跳向 activity B 时,传递一个List<对象> 出现黑屏现 象,有网友说是oncreate事件加载过多数据,list.size()==500左右的时候就开始黑屏。
2 楼 windfree 2011-05-16  
楼主总结的不错,application确实很方便
1 楼 doloveme 2011-05-10  
<p style="text-align: center;"><span style="background-color: #888888;"><span style="font-size: medium;">Android中Activity共享变量的另一方法:Application context:</span></span></p>
<p> 多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。
  如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
 </p>
<p> 新建一个类,继承自Application</p>
<p> </p>
<p> </p>
<pre name="code" class="java"> class MyApp extends Application {
  private String myState;
  public String getState() {
  return myState;
  }
  public void setState(String s) {
  myState = s;
  }
  }
  class MyApp extends
  Application {
  private String myState;
  public String getState() {
  return myState;
  }
  public void setState(String s) {
  myState = s;
  }
  }</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span style="border-collapse: collapse; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">在AndroidManifest.xml的application加个name属性就可以了,如下面所示:<br style=""><br style="">  android:name=".MyApp" android:icon="@drawable/icon"<br style="">  android:label="@string/app_name"&gt;</span></p>
<p> </p>
<p><span style="border-collapse: collapse; color: #444444; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">使用时:</span><span style="border-collapse: collapse; font-family: Tahoma, 'Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;"><span style="color: #ff0000;">(这个是重点)</span></span></p>
<p> </p>
<p> </p>
<pre name="code" class="java"> class Blah extends Activity {

@Override
  public void onCreate(Bundle b){
  ...
  MyApp appState = ((MyApp)getApplicationContext());
  String state = appState.getState();
  ...
  }
  }
  class Blah extends
  Activity {
  @Override
  public void onCreate(Bundle b){
  ...
  MyApp appState = ((MyApp)getApplicationContext());
  String state = appState.getState();
  ...
  }
  }</pre>
 
<p> </p>
<p> </p>
<p> </p>
<p><span style="color: #ff0000; font-size: medium;">当然搞个单例也可以啊,呵呵,以后研究</span></p>
<p> </p>

相关推荐

Global site tag (gtag.js) - Google Analytics