一. 使用Internt 连接activity
1.创建 intent
用下面的构造方法
Intent.Intent(Context packgeContext ,Class <?> cls );
或者先构造 一个未指向 的intent,再用下面方法
Intent.getClass(Context packageContext,Class <?> cls);
2.调用 Intent
Activity.startActivity( Intent intent);
如果 想下一个Activity时返回原来 的activity ,则
Activity.startActivityForResult (Intent intent ,int requestCode );
note :应用中的activity都要在 manifest文件中注册。
二. 使用activity传递数据
1. 在第一个activity中存入 数据 ,
Intent.putExra( String name ,String value );
name value 类似于键 值对应的,如HashMap ,name =key。不过这里它们的类型是Bundle(专门为activity面设计 的,本质 是HashMap的再封装。
2.在目标activity中取出intent中的值
先用getIntent();得到intent对象。再
Intent.getExtras() ;
得到的是一个Bundle对象。
Bundle.getString( String key )
从而得到里面的key对应的 数据 。
三。如果要返回
steps:
1. Activity.startActivityForResult( Intent intent ,int requestCode )
第二个参数 是请求码,用来标识 这次请求
2. 在onActivityResult 中,我们对返回的结果 进行处理。
protected void onActivityResult (int requesCode, int resultCode ,Intent data){
super.onActivityResult(...);
}
参数1:请求码,标识本次结果对应那个请求。
参数2:结果码,两种 。
RESULT_OK =-1:本次操作成功,则返回这个
RESUKT_CANCELLED = 0:操作取消,返回这个值 。
还有一个是 1 。自己定义 不要与之重复。
结果码除了可以用来区分 操作是否成功,还可以 区分 是由那个activity 返回的 。
参数3 :可以用 Intent.getExtras() 得到返回的值。
3.在目标activity中new 一个 Intent 对象,不用指定要跳转的activity
再使用 Intent.putExtras(Bundle bundle) 将数据与intent 绑定。
4.将intent 传入到结果 中,用
Activity.setResult( int requestCode, Intent data );
5 .调用 finish()。
结束本activity ,系统 会自动 调用 之前 的onActivityResult ().
onActivityResult(int requestCode, int resultCode, Intent data)中:
requestCode-->鉴别是谁打开的。
resultCode--->鉴别谁返回(关闭)的。
*startActivityForResult(intent, requestCode)首先文档告诉我们,只有到activity结束的时候,才会返回消息。
*startActivityForResult(intent, requestCode)中的俩个参数 ,第一个不用多说。第二个requestCode,一般情况下,我们只需要保证
requestCode>-1即可,这样它都能收到result。但是如果在A activity中,能够跳转到多个activiity,并且要接受到这多个activity中的信息的时候,我们就要注意了,这时候,requestCode就起大作用了,当你startActiviityForResult()的时候, 给每一个不同的activity一个独立的requestcode,那么在你接受到result的时候就可以通过这个参数来判断,结果是那个acitivity返回来的了。
*那么如果是,A activity跳转到B activity的时候,b有可能返回N种结果,而你在A中需要根据这N中不通的返回结果做出N种不通的处理的时候那该怎么办呢?当然,你可以用data,中添加数据了识别,但是android提供了更好的一种方式,那就是
onActivityResult(requestCode, resultCode, data)中的resultcode,你可以setresult()的时候,根据不通的结果返回不同的resultcode,这样就能区分开来。
三。例子
我们完成下面的例子,主要用到的知识点有:
(1)startActivityForResult ()
(2) requestCode 和 resultCode 的不同
(3) Edittext中怎么加入提示。要用到 android:hint 标签
1 。首先是界面文件,这里只写要注意的:
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginTop="19dp"
android:hint="请输入姓名"
android:focusable="true"
android:focusableInTouchMode="true"
android:ems="10" >
2. java文件
首先是整体部分的关键部分
先定义 了
static final int REQUEST_CODE1=1; //requestCode-->鉴别是谁打开的。
static final int REQUEST_CODE2=2;
static final int RESULT1=2; //activity 1 中返回两结果
static final int RESULT2=3;
然后
btn1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i1= new Intent (getBaseContext(),Act1.class);
startActivityForResult(i1 ,REQUEST_CODE1); //由 btn1 打开的
}
});
btn2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i2= new Intent(getBaseContext(), Act2.class);
startActivityForResult (i2 ,REQUEST_CODE2); //由 btn 2 打开 的
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch(requestCode){
case REQUEST_CODE1: //分辨是那个请求的结果
if(resultCode==RESULT1){
Bundle bundle=data.getExtras();
String request1= bundle.getString("activity1");
tv1.setText("request1 result1 :"+request1);
}else if (resultCode==RESULT2){
Bundle bundle=data.getExtras();
String request1= bundle.getString("activity1");
tv1.setText("request1 result2 :"+request1);
}
case REQUEST_CODE2:
if(resultCode==RESULT_OK){ //此处是否要用break;
Bundle bundle2 = data.getExtras();
String request2 =bundle2.getString("activity2");
tv2.setText("request2 :"+request2);
}
default: break;
}
super.onActivityResult(requestCode, resultCode, data);
}
然后是activity 1 的关键部分
定义 了
static final int RESULT1=2;
static final int RESULT2=3;
btnR2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String resultActivity1= et2.getText().toString();
Intent irequest1= new Intent ();
Bundle bundle = new Bundle();
bundle.putString("activity1", resultActivity1);
irequest1.putExtras(bundle);
setResult(RESULT2,irequest1);
finish();
}
});
btnR1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String resultActivity1= et1.getText().toString();
Intent irequest1 = new Intent ();
Bundle bundle = new Bundle();
bundle.putString("activity1", resultActivity1);
irequest1.putExtras(bundle);
setResult(RESULT1, irequest1);
finish();
}
});
activity 2 的主要部分
btnR.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String resultActivity2 = et.getText().toString();
Intent irequest2= new Intent ();
Bundle bundle = new Bundle();
bundle.putString("activity2", resultActivity2);
irequest2.putExtras(bundle);
setResult(RESULT_OK, irequest2);
finish();
}
});
et.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
String hint ;
if (hasFocus){
hint = et.getHint().toString();
et.setTag(hint);
et.setHint("");
}else {
hint = et.getTag().toString();
et.setHint(hint);
}
}
});
来源:oschina
链接:https://my.oschina.net/u/1758208/blog/263175