组件我们有了,那么我们缺少一个组件之间传递信息的渠道。利用Intent做载体,这是一个王道的做法。还有呢,可以利用文件系统来做数据共享。也可以使用Application设置全局数据,利用组件来进行控制数据。
Intent intent = new Intent(); intent.setClass(activity1.this, activity2.class); //描述起点和目标 Bundle bundle = new Bundle(); //创建Bundle对象 bundle.putString("tag", "Activity1发来的数据"); //装入数据 intent.putExtras(bundle); //把Bundle塞入Intent里面 startActivity(intent); //开始切换
另一个接受数据
Intent intent = this.getIntent(); //获取已有的intent对象 Bundle bundle = intent.getExtras(); //获取intent里面的bundle对象 string = bundle.getString("tag"); //获取Bundle里面的字符串
Intent intent = new Intent(); intent = intent.setClass(Activity1.this, AnotherActivity.class); Bundle bundle = new Bundle(); bundle.putString("string","cpacm"); intent.putExtras(bundle); startActivityForResult(intent,0); //只有这里不同,这里的0是请求码,用于返回数据的识别 //Activity1.this.finish(); //不能用finish,会触发onDestroy();
接收方:
Intent intent = new Intent(); intent = intent.setClass(AnotherActivity.this, Activity1.class); Bundle bundle = new Bundle(); bundle.putInt("result", "Activity2的处理结果"); intent.putExtras(bundle); AnotherActivity.this.setResult(RESULT_OK, intent); //RESULT_OK是返回状态码 AnotherActivity.this.finish(); //会触发onDestroy();
发送方接受消息:(其中requestCode是请求码,可以根据请求码的不同来区分不同的处理模块)
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(resultCode) { //根据状态码,处理返回结果 case RESULT_OK: Bundle bundle =data.getExtras(); //获取intent里面的bundle对象 String result = bundle.getInt("result"); break; default: break; } }
在java中,我们使用全局变量时一般都会使用静态变量,然后public类型,让所有类都可以使用这些变量。当然在Android也可以这样做。不过在这里说的是我们可以使用Application来管理这些变量。Application类是一个基类,这个基类的作用是为了获取整个应用程序的状态。 我们可以自己继承或实现这个类,当你要使用自己拓展的application类的时候,只要在manifest.xml中 的<application>标签中name应用自己定义的类就行了,这样做的结果是:当你的应用程序或者包所在的进程创建的时候,这个类就 会被实例化。
使用的方法很简单,首先继承Application类再去把它重写,主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。
启动Application时,系统会创建一个PID,即进程ID,所有的Activity就会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值, 那么在同一个应用的其他Activity中值就会改变。这样我们就达到了控制全局变量的目的。(当然application不仅仅局限于这里,它可以配合开发者设置更多的功能)
下面一个小例子:
public class MyApp extends Application{ private String learn; public String getLearn(){ return learn; } public void setLearn(String s){ this.learn= s; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); setLearn("cpacm"); //初始化全局变量 } }
上面就是一个继承了Application类的简单使用,我们只是新建了一个字符串变量。没有全局,也没有静态,要使用它必须要通过MyApp才行。
接下来看看我们怎么使用它:
public class mainActivity extends Activity { private MyYApp myApp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myApp= (MyYApp) getApplication(); //获得自定义的应用程序YApp Log.d("TEST", "InitLabel:"+myApp.getLearn()); //将我们放到进程中的全局变量拿出来,看是不是我们曾经设置的值 myApp.setLearn("ahaha"); //修改一下 Log.d("TEST", "ChangeLabel:"+myApp.getLearn()); //看下,这个值改变了没有 } }
最后在配置文件中注册自己定义的App
<!-- 在这里,将默认的Application设置成自己做的MyApp--> <application android:name="MyApp" .../>
五、结束语
呼~从写第一篇博文开始,到现在已经一个月了,不知不觉中时间就过去了呢。期间断断续续地写了十几篇博文,不过写的好也罢,写的不好也罢,反正博主感觉自己收获很大,和以前的想要什么功能就去学什么那样片段式的学习相比,现在这种全面学习感觉好多了。
到这里为止,Android入门篇的组件部分就基本上完毕了,当然里面还有很多内容可以深究,这方面要大家自己挖掘了。那么接下来就是Android的控件部分了,额,一想到那么多的控件头都大了,不过基本原理都是相通的,举一反三嘛~好了,如果有什么问题也可以联系我一起探讨学习,最后希望大家Have a good day.
========================================
作者:cpacm
出处:(http://www.cnblogs.com/cpacm/p/3946586.html)