职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 568|回复: 9

Activity之间的传值

[复制链接]
fl 发表于 2011-6-18 21:19 | 显示全部楼层 |阅读模式
Activity之间的传值:

方法1: 1给2传值
Activity1:

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

                final Intent intent = new Intent(mCtx,Activity1.class) ;
                //将当前用户传递下去
                intent.putExtra("user", mUser);
                startActivity(intent); 里边mUser是一个对象,传的事实上是一个Map,"user"是对象mUser的key


Activity2:


Java代码  
mUser = (User) getIntent().getSerializableExtra("user");  

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

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

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

方法2:

Activity1:


Java代码  
intent.setClass(mCtx, <SPAN style="WHITE-SPACE: normal">Activity2</SPAN>.class);   
intent.putExtra("user", mUser);   
startActivityForResult(intent, 1);  

                        intent.setClass(mCtx, Activity2.class);
                        intent.putExtra("user", mUser);
                        startActivityForResult(intent, 1);
并且在Activity1中

Java代码  
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");   
}  

        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:

获取传来的值


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

mIntent = getIntent()
mUser=(User) mIntent.getSerializableExtra(UserConst.USER_DATA);
在按返回键时跳转到1

Java代码  
@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);   
}  

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


fossil 发表于 2011-6-18 21:19 | 显示全部楼层
Android中Activity共享变量的另一方法:Application context:
多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。  如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。 
 新建一个类,继承自Application


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

 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">

使用时:(这个是重点)


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

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



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


只学java 发表于 2011-6-18 21:19 | 显示全部楼层
楼主总结的不错,application确实很方便

yoyo 发表于 2011-6-18 21:19 | 显示全部楼层
我遇到了一个这方面的问题,还请楼主解答。
http://topic.csdn.net/u/20110513/14/6b948267-4a2f-4f0d-9318-8f6e685bb5d8.html
这是连接。
activity A 跳向 activity B 时,传递一个List<对象> 出现黑屏现 象,有网友说是oncreate事件加载过多数据,list.size()==500左右的时候就开始黑屏。

找不到我 发表于 2011-6-18 21:19 | 显示全部楼层
application 共享很不错。


ksdal 发表于 2011-6-18 21:19 | 显示全部楼层
我们一直都用application

曾经的小孩 发表于 2011-6-18 21:19 | 显示全部楼层
application的生命周期知道哪为大虾可以指点下,在下不身感激

钰云 发表于 2011-6-18 21:20 | 显示全部楼层
xucm1986 写道
application的生命周期知道哪为大虾可以指点下,在下不身感激


从程序开始,到结束

话说我当年 发表于 2011-6-18 21:20 | 显示全部楼层
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.应该加入同步支持,你可以试验一下,呵呵

ksdal 发表于 2011-6-18 21:20 | 显示全部楼层
jstl1point0 写道
application 共享很不错。



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

但是不知道application对于bean修改权限什么的,有没有逻辑上的安全隐患啊


您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-28 13:22 , Processed in 0.149737 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表