返回码
来源:互联网 发布:360手机游戏优化器 编辑:程序博客网 时间:2024/06/06 02:45
Android接受多页面回传值
startActivityForResult和onActivityResult详解
方法:startActivityForResult(发送请求),setResult(回传结果); onActivityResult(接收结果)
startActivityForResult顾名思义为:为了获取结果开启activity页面,所以,和startActivity不同的是,startActivity新开的页面,回传值不能关闭新开的页面,同时,不能用于同一个页面接收多个页面传回来的值。
startActivityForResult(intent, 2);里面包括了,请求码2,也就是有个带着requestCode指令2到intent这个新页面去拿值,只要intent这个页面回传时:用setResult(3,intentMain);回传到需要取值的页面,也就是带着3这个resultCode回传回刚才的intentMain页面,回传后,随便可以关闭这个新开intent的页面也是可以的。这样结果就回到需要值的那个intentMain页面上了。
然后,回传到了intentMain这个页面上的值,需要获取,怎么获取呢?
这时:用onActivityResult(这个是继承Activity,所覆盖的方法)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case 1:
Bundle bundle = data.getExtras();
System.out.println("requestCode:"+requestCode);
System.out.println("resultCode:"+resultCode);
System.out.println("A页面:"+bundle.getString("name_1"));
break;
case 2:
System.out.println("requestCode:"+requestCode);
System.out.println("resultCode:"+resultCode);
System.out.println("B页面:"+data.getStringExtra("name_2"));
break;
default:
break;
}
}
这样就可以接收完成需要的值了……
下面举个例子:
MainActivity(主页面:需要接收A和B页面值的主页):
public class MainActivity extends Activity{
private TextView get_data;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
get_data = (TextView)findViewById(R.id.get_data);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case 1:
if(resultCode==3){
Bundle bundle = data.getExtras();
System.out.println("requestCode:"+requestCode);
System.out.println("resultCode:"+resultCode);
System.out.println("A页面:"+bundle.getString("name_1"));
get_data.setText(bundle.getString("name_1"));
}
break;
case 2:
System.out.println("requestCode:"+requestCode);
System.out.println("resultCode:"+resultCode);
System.out.println("B页面:"+data.getStringExtra("name_2"));
get_data.setText(data.getStringExtra("name_2"));
break;
default:
get_data.setText("没有传成功");
break;
}
}
public void open_A(View v){
Intent intent = new Intent(this,A.class);
startActivityForResult(intent, 1);
}
public void open_B(View v){
Intent intent = new Intent(this,B.class);
startActivityForResult(intent, 2);
}
}
A.java(A页面)
public class A extends Activity{
private EditText a_post_data;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.a);
a_post_data = (EditText)findViewById(R.id.a_post_data);
}
public void return_main_a(View v){
Intent intent = new Intent(this,MainActivity.class);
String name_1 = a_post_data.getText().toString();
Bundle bundle = new Bundle();
bundle.putString("name_1", name_1);
intent.putExtras(bundle);
setResult(3, intent);
this.finish();
}
}
B.java(B页面)
public class B extends Activity{
private EditText b_post_data;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.b);
b_post_data = (EditText)findViewById(R.id.b_post_data);
}
public void return_main_b(View v){
Intent intent = new Intent(this,MainActivity.class);
String name_2 = b_post_data.getText().toString();
intent.putExtra("name_2", name_2);
setResult(RESULT_OK, intent);
}
}
其中:A页面中的resultCode为3;B页面中的resultCode为RESULT_OK;
RESULT_OK是android中的默认常量,值为-1;上面测试可以知道……
A页面,传完然后关闭,主页是可以接收成功的,
B页面,为了测试效果,故意不关闭,点击按钮后,一样可以成功传值,但是,页面没关闭,需要退回来到主页才能看到值。
当然,需要用一下小小的xml:代码如下:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/get_data"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="开始了...."
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打开A"
android:onClick="open_A"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="open_B"
android:text="打开B" />
</LinearLayout>
a.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<EditText
android:id="@+id/a_post_data"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="我是A页面传回来的……A"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="传值回给首页"
android:onClick="return_main_a"
/>
</LinearLayout>
b.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<EditText
android:id="@+id/b_post_data"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="我是B页面传回来的……B"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="传值回给首页"
android:onClick="return_main_b"
/>
</LinearLayout>
- 返回码
- CICS返回码参考
- 返回码的设计
- http返回码解析
- HTTP返回码总结
- 服务器返回状态码
- http返回信息码
- squid返回状态码
- HTTP返回码
- HTTP返回码总结
- HTTP返回码总结
- http 返回码
- 服务器返回状态码
- HTTP返回码总结
- HTTP 返回码
- HTTP返回码
- 服务器返回状态码
- 服务器返回状态码
- CEPH POOL MIGRATION
- Unity3D Shader学习(一)
- Redis中的跳跃表
- PHP Web ApplicationPHP Debug 配置方法
- namespace
- 返回码
- 使用http协议获取网络图片
- iOS开发:sqlite的简单实用
- c++ 使用stringstream对象简化类型转换
- PYTHON-进阶-编码处理小结
- Nagle算法
- 数据库设计Step by Step (10)——范式化
- Ratchet教程:meta与link标签
- CQOI2016题目&CQOI2016题解&不同的最小割&K远点对&手机号码&密匙破解&路由表&伪光滑数