论坛首页 移动开发技术论坛

Activity之间的传值

浏览 13032 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-07  

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);
	}
 

 

   发表时间:2011-05-10  

Android中Activity共享变量的另一方法:Application context:

多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。   如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。  

 新建一个类,继承自Application

 

 

 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;
  }
  }

 

 

 

在AndroidManifest.xml的application加个name属性就可以了,如下面所示:

  android:name=".MyApp" android:icon="@drawable/icon"
  android:label="@string/app_name">

 

使用时:(这个是重点)

 

 

 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();
  ...
  }
  }
 

 

 

 

当然搞个单例也可以啊,呵呵,以后研究

 

0 请登录后投票
   发表时间:2011-05-16  
楼主总结的不错,application确实很方便
0 请登录后投票
   发表时间: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左右的时候就开始黑屏。
0 请登录后投票
   发表时间:2011-05-16  
application 共享很不错。
0 请登录后投票
   发表时间:2011-05-17  
我们一直都用application
0 请登录后投票
   发表时间:2011-05-17  
application的生命周期知道哪为大虾可以指点下,在下不身感激
0 请登录后投票
   发表时间:2011-05-17  
xucm1986 写道
application的生命周期知道哪为大虾可以指点下,在下不身感激


从程序开始,到结束
0 请登录后投票
   发表时间: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.应该加入同步支持,你可以试验一下,呵呵
0 请登录后投票
   发表时间:2011-05-17  
jstl1point0 写道
application 共享很不错。


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

但是不知道application对于bean修改权限什么的,有没有逻辑上的安全隐患啊
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics