newInstance()方法这个是一种“静态工厂方法",需要的时候来调用去实例化;
让我们在初始化和设置一个新的fragment的时候免得去一一创建 。
调用MyFragment.newInstance(index)去动态创建Fragment
public class MainActivity extends AppCompatActivity {
private RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup = findViewById(R.id.radiogroup);
//默认选中一个
radioGroup.check(R.id.radio0);
//默认加一个
newFragmant(MainFragment.newInstance(0));
//设置监听
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//获取当前选值得id
int id = radioGroup.indexOfChild(group.findViewById(checkedId));
//打印获取到的角标id
Log.i("id", "onCheckedChanged: " + id);
//根据id创建Fragment
newFragmant(MainFragment.newInstance(id));
}
});
}
//创建Fragment
private void newFragmant(Fragment fragment) {
//获取管理者开事务
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
//是否添加过-->添加过显示-->没添加过得添加
if (fragment.isAdded()) {
transaction.show(fragment).commit();
} else {
transaction.add(R.id.fragment, fragment).commit();
}
//只要fragment不等于空 就隐藏当前的
if (preFragment != null) {
transaction.hide(preFragment);
}
preFragment = fragment;
}
}
Fragment静态工厂写法:
自定义一个MyFragment类,继承V4包Fragment;
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
if (bundle != null) {
int index = bundle.getInt("index");
//打印当前执行页面
Log.i("myFragment", "onCreate: " + index);
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.pager_frag, null, false);
return view;
}
//调用该方法时需要传入下标参数
public static MyFragment newInstance_pager(int index) {
//实例化对象
MyFragment_pager myFragment = new MyFragment_pager();
//Bundle类型
Bundle args = new Bundle();
//将下标放入以‘key’‘value’Bundle
args.putInt("index", index);
//利用setArguments传参数
myFragment.setArguments(args);
return myFragment;
}
}