发表于: 2018-11-03 21:28:53
0 786
一、今天完成的事情
完成了雇主发布,实现了任务六要求的两个功能,期间又涉及到了Activity和Fragment之间传值,因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常。
1.Fragment传值给Activity
之前已经写过了,实现方式是在Fragment中定义一个接口,在Activity中实现接口,获取接口中的数据,这里的Fragment位于Activity中。
2.Activity传值给Fragment
第一种,使用Bundle
在Activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_employer_post);
initView();
loadInfo();
//传值给SetDateFragment
String year = String.valueOf(MyCalendar.getSysYearInt());
Bundle bundle = new Bundle();
bundle.putString("year_limit", year);
}
case R.id.tv_date_from:
dateSite = DATE_FROM;
if (setDateFM == null) {
setDateFM = new SetDateFragment();
setDateFM.setArguments(bundle);
}
addOrShowFragment(getSupportFragmentManager().beginTransaction(), setDateFM);
glassView.setVisibility(VISIBLE);
showFragmentFL.setVisibility(VISIBLE);
break;
case R.id.tv_date_to:
dateSite = DATE_TO;
if (setDateFM == null) {
setDateFM = new SetDateFragment();
setDateFM.setArguments(bundle);
}
addOrShowFragment(getSupportFragmentManager().beginTransaction(), setDateFM);
glassView.setVisibility(VISIBLE);
showFragmentFL.setVisibility(VISIBLE);
break;
在Fragment中
@Override
public void onStart() {
super.onStart();
if (isAdded()) {//判断Fragment已经依附Activity
year = Integer.parseInt(getArguments().getString("year_limit"));
}
}
第二种
在Activity中定义方法
public String getTitles(){
return "hello";
}
在Fragment中
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//通过强转成宿主activity,就可以获取到传递过来的数据
titles = ((EmployerPostActivity) activity).getTitles();
}
需要注意的是Fragment用两种引用方式,一种是在Android3.0时引入的,还有一种是Support V4包里面的,在support v4包中onAttach(Activity activity)已被弃用,只能用onAttach(Context context),最好是使用v4包。
二、明天计划的事情
开始任务七,阅读百度地图的开放文档
三、遇到的问题
四、收获
Activity和Fragment之间传递数据
评论