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传值

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。