Android中onActivityResult详解

众所周知,根据mvc设计模式,数据是要通过model来传递的,从一个activity(以下简称A)到另外一个activity(以下简称B)如果要传值的话我们可以将model放到intent中(也可以不放),然后在B创建之后取得相应的值;反之,如果从B回传值给A的话,也是可行的,只不过要在A的onActivityResult中接收相应的值。这几种方法各有优缺点,大家自己可以结合实际情况来选择。

本文的中心思想交代完毕,下面就开始看具体的代码演示吧。

一、通过model传值

1. 将model设置到Intent中传值

  1. 直接通过model传值

    这种方法非常简单,我们可以通过新建一个数据源单例DataSource,然后将所有的model都放在里面,需要传值的时候直接给model赋值即可。

    以下展示数据源DataSource核心代码:

public class DataSource {
    public Job job;

    private static DataSource instanceDataSource;
    public static DataSource shareInstance(){
        if (null == instanceDataSource) {
            instanceDataSource = new DataSource();
        }
        return instanceDataSource;
    }
}

好,假设我们现在有一个工作列表页(JobActivity)和工作详情页(JobDetailActivity),最常见的情形莫过于选择列表页的某个item,进入详情页。那么传值的话核心代码如下:

//位于JobActivity中,点击列表页的某项,相应了listview的onItemClick方法
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent();
        //mJobs这个成员变量是Listview的数据来源,给数据源的某个model(即job)赋值,由于datasource 是单例,所有的成员变量一旦赋值,就会常驻内存,不会变化,因此传递的值是不会变化的
        DataSource.shareInstance().job = JobActivity.this.mJobs.get(position);
        intent.setClass(this, JobDetailActivity.class);
        this.startActivity(intent);
    }

以下是接受值的核心代码

//位于JobDetailActivity中,在oncreate方法中
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_job_detail);
        //取得相应的model
        Job job = DataSource.shareInstance().job;
        //虽然多此一举,但还是做个判断吧,哈哈!
        if (null != job) {
            titleTextView = (TextView) findViewById(R.id.jobdetail_title_textview);
            titleTextView.setText(null != job.jobName ? job.jobName : "");
            areaTextView = (TextView) findViewById(R.id.jobdetail_area_textview);
            areaTextView.setText(null != job.workArea ? job.workArea : "");
            salaryTextViearw = (TextView) findViewById(R.id.jobdetail_salary_textview);
            salaryTextViearw.setText(null != job.workSalary ? job.workSalary : "");
            companyTextView = (TextView) findViewById(R.id.jobdetail_company_textview);
            companyTextView.setText(null != job.workCompany ? job.workCompany : "");
            contactTextView = (TextView) findViewById(R.id.jobdetail_contact_textview);
            contactTextView.setText(null != job.workContact ? job.workContact : "");
        }
}

二、通过intent传值

时间: 2024-10-10 14:17:53

Android中onActivityResult详解的相关文章

Android中Context详解 ---- 你所不知道的Context

转载至 :http://blog.csdn.net/qinjuning 前言:本文是我读<Android内核剖析>第7章 后形成的读书笔记 ,在此向欲了解Android框架的书籍推荐此书. 大家好,  今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中 时刻的在与它打交道,例如:Service.BroadcastReceiver.Activity等都会利用到Context的相关方法 : 说它陌生,完全是 因为我们真正的不懂Context

Android中Context详解 ---- 你所不知道的Context (转载)

Android中Context详解 ---- 你所不知道的Context (转载) http://blog.csdn.net/qinjuning 大家好,  今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中 时刻的在与它打交道,例如:Service.BroadcastReceiver.Activity等都会利用到Context的相关方法 : 说它陌生,完全是 因为我们真正的不懂Context的原理.类结构关系.一个简单的问题是,一个应用

Android中Context详解 ---- 你所不知道的Context(转)

Android中Context详解 ---- 你所不知道的Context(转)                                              本文出处 :http://blog.csdn.net/qinjuning 前言:本文是我读<Android内核剖析>第7章 后形成的读书笔记 ,在此向欲了解Android框架的书籍推荐此书. 大家好,  今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中 时刻的在与它打

Android中Animation详解

Animation从总体来说可以分为两类: Tweened Animations:该类提供了旋转,移动,伸展,淡入淡出等效果 Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多 一.Tweened Animations Tweened Animations也有四种类型: Alpha:淡入淡出效果Scale:缩放效果Rotate:旋转效果Translate:移动效果 设置动画效果可以在XM

Android中Handle详解

网上发现一片总结很好的就copy过来: Handler有何作用?如何使用? 一 .Handler作用和概念 包含线程队列和消息队列,实现异步的消息处理机制,跟web开发的ajax有异曲同工之妙. 1.运行在某个线程上,共享线程的消息队列: 2.接收消息.调度消息,派发消息和处理消息: 3.实现消息的异步处理: Handler能让你发送和处理消息以及Runnable对象:每个Handler对象对应一个Thread和Thread的消息队列.当你创建一个Handler时,它就和Thread的消息队列绑

Android中BroadCastReceiver详解

BroadcastReceiver的解释 BroadcastReceiver也就是"广播接收者"的意思,它是用来接收来自系统和应用中的广播. 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件. 下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程: (1)首先在需要发送信息的地方,把要发送的信息和用于过滤的信息

Android中Intent详解(一)

Intent是一种消息传递机制,它可以在应用程序内使用,也可以在应用程序间使用,主要用途分为: 1.使用类名显示的启动一个特定的Activity或Service 2.启动Activity或Service来执行一个动作的Intent,通常需要使用特定的数据,或者对特定的数据执行动作 3.广播某个事件已经发生 Intent最常见的一个用法是显示的(通过指定要装载的类)或隐式的(通过请求对一条数据执行某个动作)启动新的activity,在后一种情况下,动作不一定由调用应用程序中的Activty执行.

android中getSystemService详解

android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardService提供剪切板功能,PackageManagerService提供软件包的安装移除及查看等等,应用程序可以通过系统提供的Manager接口来访问这些Service提供的数据. getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对

Android中LaunchMode详解

越是做的时间越长,基础知识就忘的越干净,最近做一个项目中,发现启动的几个Activity居然重叠了,我ri--,再不回忆一下就要退出Android界了. 概念解释 Task Task叫做任务,这个简单,表示我们需要完成的事情,注意,这里我们说的是任务,是个名词,例如要发短信,那我们的任务就是发送一条短信,仅此而已,再例如教官说:"张三,你去吃屎!",ok,那张三的任务就是吃屎. Back Stack 我们常叫做回退栈,或者是任务栈,这个是什么意思呢?上面我们说过,需要完成任务,那我们就