发表于: 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之间传递数据



返回列表 返回列表
评论

    分享到