activity-intent-startActivity-startActivityResult
Posted on 2013-12-07 12:27 我什么都有,就是没钱 阅读(575) 评论(0) 收藏 举报一。 Intent和startActivity
1.在一个Activtiy中可以使用startActivity()去开始另一个制定的Activity
但在android3.0(是针对平板出的产品)之后出现了碎片处理(fragment),在平板的屏幕处理中,一个屏幕可以有两个Activity,其中一个Activity可以做成多个fragment,
而另一个Activtiy中可以用来进行fragment对应的显示。 因此,一个activity中可以有多个fragment。
2.Intent intent = new Intent();
startActivity(intent)
3.创建Activity
当你的工程建立好了之后,可以直接右键包名,选择new->other->android:android activtiy,系统会自动给你生成这个activity对应的清单文件和布局文件,很方便
Intent intent = new Intent();
intent.setClass(this,SetingActivity.class);
startActivity(intent);
4.activity之间如何进行参数传递
参数传递对应的有3中方法
》第一种:
Intent intent = new Intent();
intent.setClass(this,SetingActivity.class);
intent.putExtras(name,value);
startActivity(intent);
这种方法可以传一个键值对
》第二种:
第二种仅仅是把第一种进行改写一下,介绍第二种之前先介绍一下onCreat方法里面的那个参数:Bundle类型
Bundle 是android中提供的传递数据的类型,使用方法类似于HashMap。因此上面的这一行
intent.putExtras(name,value);代码的操作类似于调用如下方法:
public void putExtra(String name, String value){
Bundle bundle = new Bundle();
bundle.putString(name,value);
intent.putExtras(bundle);
}
为什么要这样做呢?这样做仅仅是为了封装以下,操作方便而已
因此第二种方法可以这样做:
Intent intent = new Intent();
intent.setClass(this,SetingActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name1","我是名字1的value");
bundle.putString("name2","我是名字2的value");
bundle.putString("name3","我是名字3的value");
intent.putExtras(bundle);
startActivity(intent);
这样的好处是可以传多个键值对
》第三种:
如果是对象怎么办,使用上面的那种方法就没法传值了吧。
不过putExtra还有另为一种方法,如下:
public Intent putExtra(String name,Serializable){}
注意这个Serializable的意思是序列化,Serializable是个接口,因此,如果是Serializable的子类都能使用,因此把类实现了Serializable这个借口就可以了不是么
intent.put("object",user);
因此,user只要实现了Serializable这个接口就可以了(在序列化时候,系统会提示你给一个版本id,只要提供一个就行了,补充一点:不过如果user是内部类的话,序列化会出现问题)
5.如何获取参数
在另一个Activity中可以使用
getIntent()就可以拿到对应的意图:
Intent intent = getIntent();
Bundle bundle = intent.getExtra();
User user = (User)bundle.get("object");
二。 Intent和startActivityForResult()
startActivity用于把数据传过去,有时候需要把数据传回来
startActivityForResult()
比如:你的程序把参数传给照相机,照相机照完相之后把相片传给你的程序
发起方要重写onActivityResult()来接收执行方回送的数据。
执行方调用setResult()来传递想要会送给发送方的数据,一般执行方方的数据也是意图,意图里面放的数据
@1.发送方
startActivityForResult(intent,requestCode);
requestCode:相当于一个id,用于指定这个intent是我发出来的,也就是用于指定我自己的标示。在onActivityResult()方法里面能够进行判断
@2.接收方
在oncreat方法里面进行接收,然后进行处理,通过setResult把数据返回给发送方
setResult(resultCode, data);其中resultCode用于标示接收方自己。data是返回的数据,类型是Intent类型
@3.发送方
此时放送方能够收到数据了,不过要重写onActivityResult方法,方法如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
requestCode就是第一步指定的requestCode,resultCode就是第二步指定的resultCode,data就是第二步指定的data。因此在onActivityResult要对前两个参数进行判断,都满足了才能使用第三个参数的数据
三.startActivityForResult的例程
下面是一个startActivityForResult的一个demo:
@1.发送方的MainActivity.java和其中使用的相加对应的javaBean对应的类的代码如下:
package com.zyf.android.activityresult; import com.zyf.android.bean.AddBean; import com.zyf.android.util.LogUtil; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(); intent.setClass(this, OtherActivity.class); LogUtil.d(LogUtil.TAG, "data from MainActivity"); intent.putExtra("add",new AddBean(5,3)); startActivityForResult(intent, 500); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == 500 && resultCode ==10){ Bundle bundle = data.getExtras(); int result =bundle.getInt("result"); LogUtil.d(LogUtil.TAG, "result is:"+result); } } } /** *javaBean对应的类,可以发现这个类实现了序列化的操作,因此能够进行数据传递 */ package com.zyf.android.bean; import java.io.Serializable; public class AddBean implements Serializable { /** * */ private static final long serialVersionUID = 1L; private int a; private int b; public AddBean(int a, int b) { super(); this.a = a; this.b = b; } public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } }
@2.接收方
接收方是另一个Activity,关于多Activity如何创建,很简单,就是在src上新建选择android->Activity就可以建一个activity了
package com.zyf.android.activityresult; import com.zyf.android.bean.AddBean; import com.zyf.android.util.LogUtil; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; public class OtherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_other); Intent intent = getIntent(); Bundle bundle =intent.getExtras(); //intent.get AddBean addBean = (AddBean)bundle.getSerializable("add"); int result = addBean.getA() + addBean.getB(); intent.putExtra("result", result); LogUtil.d(LogUtil.TAG, "enter the other Activity"); //LogUtil.d(LogUtil.TAG, "requestCode is:"+requestCode +" resultCode is:"+resultCode); setResult(10, intent); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.other, menu); return true; } }
@3.运行的结果如下:

可以看到实现了数据从MainActivity到OtherActivity的传递,并在OtherActivity中进行相加把结果传回给MainActivity的目的。
浙公网安备 33010602011771号