Android中Activity处理返回结果的实现方式

大家在网上购物时都有这样一个体验,在确认订单选择收货人以及地址时,会跳转页面到我们存入网站内的所有收货信息(包含收货地址,收货人)的界面供我们选择,一旦我们点击其中某一条信息,则会自动跳转到订单提交界面,此时的收货信息已经变为我们之前选择的收件信息、

为了实现这个功能,Android提供了一个机制,跳转到其他activity时,再返回,可以接受到其他activity返回的值,无需再start新的当前activity;下面的示例中,创建两个activity,其中在MainActivity中提示输入“您的属相”,然后单击TextView“您的属相”启动Main2Activity,在Main2Activity中选择属相,然后当返回MainActivity时,把之前Main2Activity中选择的数据原样返回给MainActivity。实现效果如下图:

核心实现步骤如下:

(1)在MainActivity中设置启动带结果requestCode的Activity

(2)在MainActivity中设置处理返回结果的方法

(3)在Main2Activity中设置返回结果

具体布局以及功能实现代码如下:

(1)layout中activity_main.xml首页布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:id="@+id/activity_main"
 6     android:layout_width="match_parent"
 7     android:layout_height="match_parent"
 8     android:orientation="vertical"
 9     tools:context="com.example.administrator.testactivity.MainActivity">
10     <TextView
11         android:id="@+id/tv1"
12         android:layout_width="match_parent"
13         android:layout_height="wrap_content"
14         android:hint="潘侯爷的属相"
15         android:gravity="center"
16         android:textSize="30sp"/>
17     <Button
18         android:id="@+id/btn1"
19         android:layout_width="wrap_content"
20         android:layout_height="wrap_content"
21         android:layout_gravity="right"
22         android:text="确定"/>
23 </LinearLayout>

(2)layout中activity_main2.xml第二页布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:id="@+id/activity_main2"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context="com.example.administrator.day15.Main2Activity">
 8     <ListView
 9         android:id="@+id/lv"
10         android:layout_width="match_parent"
11         android:layout_height="match_parent"></ListView>
12 </RelativeLayout>

(3)java中首页布局MainActivity.java实现代码:

 1 import android.content.Intent;
 2 import android.support.v7.app.AppCompatActivity;
 3 import android.os.Bundle;
 4 import android.view.Gravity;
 5 import android.view.View;
 6 import android.widget.Button;
 7 import android.widget.TextView;
 8 import android.widget.Toast;
 9 public class MainActivity extends AppCompatActivity {
10     private Button btn1;
11     private TextView tv1;
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16         btn1 = (Button) findViewById(R.id.btn1);
17         tv1 = (TextView) findViewById(R.id.tv1);
18         tv1.setClickable(true);
19         tv1.setOnClickListener(new View.OnClickListener() {
20             @Override
21             public void onClick(View v) {
22                 Intent intent = new Intent(MainActivity.this, Main2Activity.class);
23                 //设置启动intent以及对应的请求码
24                 startActivityForResult(intent, 2);
25             }
26         });
27         btn1.setOnClickListener(new View.OnClickListener() {
28             @Override
29             public void onClick(View v) {
30               Toast t=  Toast.makeText(MainActivity.this, tv1.getText().toString(), Toast.LENGTH_SHORT);
31                 t.setGravity(Gravity.TOP,0,0);
32                 t.show();
33             }
34         });
35     }
36     @Override
37     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
38         super.onActivityResult(requestCode, resultCode, data);
39         //建议添加逻辑判断(使请求码与结果码配对,确保返回结果是请求码所请求的)
40         tv1.setText(data.getStringExtra("select"));
41     }
42 }

(4)java中第二页页布局Main2Activity.java实现代码:

 1 import android.content.Intent;
 2 import android.support.v7.app.AppCompatActivity;
 3 import android.os.Bundle;
 4 import android.view.View;
 5 import android.widget.AdapterView;
 6 import android.widget.ArrayAdapter;
 7 import android.widget.ListView;
 8 public class Main2Activity extends AppCompatActivity {
 9     private ListView lv;
10     String[] names={"马","牛","虎","兔","龙"};
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main2);
15         lv = (ListView) findViewById(R.id.lv);
16         //使用ArrayAdapter为ListView每个单元格填充数据
17         ArrayAdapter<String> adapter = new ArrayAdapter<String>(Main2Activity.
18                 this,android.R.layout.simple_list_item_single_choice,names);
19         //设置ListView为单选模式
20         lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
21         //为ListView中的每个ITERM设置单击事件
22         lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
23             @Override
24             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
25                 Intent intent =new Intent(Main2Activity.this, MainActivity.class);;
26                 //将选中的item对应的信息配上键值装入Extra中供传递用
27                 intent.putExtra("select",names[position]);
28                 //设置3为结果码
29                 setResult(3,intent);
30                 finish();//结束当前Activity,返回上一个activity
31             }
32         });
33         lv.setAdapter(adapter);
34     }
35 }
时间: 2024-10-22 15:09:48

Android中Activity处理返回结果的实现方式的相关文章

Android中Activity数据返回(使用startActivityForResult)

1.在第一个Activity(MainActivity.java)中以方法startActivityForResult(Intent intent, Int requestCode)启动第二个页面(TwoActivity.java): Bundle bundle = new Bundle(); bundle.putString("strSex", strSex); bundle.putDouble("douHeight", douHeight); Intent in

Android中Activity启动模式详解,可以控制程序按home键后进来还会调用一个自己不喜欢的界面

其实这是很简单的一个问题.但是这还是要对android中activity的启动模式有相当的理解才行,当点击home键的时候,懂Android的人都知道,他会把当前activity放到后退栈中, 栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算.人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底.向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称为出栈或退栈,它是把栈

android中Activity回传数据

比如从A跳转到B,然后等待从B回传数据: 那么在A中这样跳转: startActivityForResult(intent, 100); 后面那个requestCode要大于0: 然后在A中重写这个方法: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.e("onActivityResult", "onActivityResult&quo

android 中activity 属性说明(转载)

转自:http://liuwuhen.iteye.com/blog/1759796 activity是android中使用非常平凡的一种组件,我们除了需要掌握activity中的生命周期以外,还需要掌握activity中的其 他设置. 1.activity 中主题的设置   android中我们可以通过AndroidManifest.xml中设置activity中的主题,其实android提供了许多自带的主题样式,如下: android:theme="@android:style/Theme.D

android中activity之间传递数据的3种方式

在android开发中总是需要不停的传递数据,特别是不同的Activity之间.在这里小编介绍自己所知的3种Activity的跳转方式. 第一种:静态传递数据 直接上部分代码:在第一个Activity中 Intent intent = new Intent(); intent.setClass(MainActivity.this,SecondActivity.class); SecondActivity.usrname = "jack"; SecondActivity.password

Android中Activity启动模式详解

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" /> Activity的四种启动模式:

android中activity.this跟getApplicationContext的区别

转载: http://www.myexception.cn/android/1968332.html android中activity.this和getApplicationContext的区别 在android中常常会遇到与context有关的内容 浅论一下context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求传递的 参数就是一个context,在这里我们传入的是this,那么这个this究

转-android 中activity 属性说明

activity是android中使用非常平凡的一种组件,我们除了需要掌握activity中的生命周期以外,还需要掌握activity中的其 他设置. 1.activity 中主题的设置   android中我们可以通过AndroidManifest.xml中设置activity中的主题,其实android提供了许多自带的主题样式,如下: android:theme="@android:style/Theme.Dialog"   将一个Activity显示为能话框模式 android:

Android中Activity的四种启动方式

谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开始读取数据,栈具有记忆功能,对栈的操作不需要指针的约束.在Android中Activity的显示其实就是一个入栈和出栈的过程.当打开一个Activity的时候Activity入栈,当关闭一个Activity的时候Activity出栈,用户操作的Activity位于栈顶,一般情况下,一个应用程序对应一