1、开发工具与关键技术:Eclipse、AndroidStudio
2、撰写时间:2020年06月08日
今天我们来谈谈newInstance()的使用,newInstance()有何作用呢!其实,使用newInstance()传递参数更加方便。newInstance()方法是一种“静态工厂方法”,一般都是在初始化Fragment之前执行。Fragment提供静态工厂方法是一种好的做法,因为它封装和抽象了在客户端构造对象所需的步骤。如果我们没有重写这个方法,默认调用系统本身的构造方法。这样的话使用起来就没有那么方便。有可能出现,Fragment的创建出现问题,传递参数获取不到。
Activity与Fragment使用newInstance()
Fragment中的静态工厂
public class FlightDetailslistFragment extends Fragment {
//静态工厂方法
public static FlightDetailslistFragment newInstance(FlightInfoVo flightInfoVo){//序列化对象
FlightDetailslistFragment fragment = new FlightDetailslistFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("flightInfoVo", flightInfoVo);
fragment.setArguments(bundle);
return fragment;
}
}
Activity获取参数
public class FlightDetailsActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置布局
setContentView(R.layout.activity_fight_details);
Intent intent=this.getIntent();
flightInfoVo= (FlightInfoVo) intent.getSerializableExtra("flightInfoVo");
}
}
Fragment与Fragment使用newInstance()
说明:这里我使用的是TableLayout+ViewPager2+Fragemnt,所以有两个Fragemnt
public class FlightDetailsFragment extends Fragment {
//创建Fragment
@NonNull
@Override
public Fragment createFragment(int position) { //这个id的来源
if (fragments[position] == null) {
//创建传递参数的Bundle ,在这里还可以添加参数进去
Bundle bundle = new Bundle();
bundle.putInt("orderStateId", orderStateIdTitle[position]);
//创建Fragment
FlightFragment flightFragment = FlightFragment.newInstance(flightInfoVo);
//设置参数
flightDetailslistFragment.setArguments(bundle);
fragments[position] = flightDetailslistFragment;
}
return fragments[position];
}
}
获取值的Fragment
public class FlightFragment extends Fragment {
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
flightInfoVo=(FlightInfoVo)getArguments().getSerializable("flightInfoVo");
mActivityContext= (Activity) context;
}
}