众所周知,根据mvc设计模式,数据是要通过model来传递的,从一个activity(以下简称A)到另外一个activity(以下简称B)如果要传值的话我们可以将model放到intent中(也可以不放),然后在B创建之后取得相应的值;反之,如果从B回传值给A的话,也是可行的,只不过要在A的onActivityResult中接收相应的值。这几种方法各有优缺点,大家自己可以结合实际情况来选择。
本文的中心思想交代完毕,下面就开始看具体的代码演示吧。
一、通过model传值
1. 将model设置到Intent中传值
- 直接通过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