Activity与Fragment、Fragment与Fragment之间newInstance()的使用

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;
   }
}

你可能感兴趣的:(java移动开发)