继承Fragment的自定义Fragment类CustomFragment,不能像继承Activity的自定义Activity类CustomActivity一样,通过修改构造方法来实现传递参数。所以我们要通过bundle和instance来实现。
分四步:
1.创建参数对应的全局变量,用于使用。
2.newInstance初始化Fragment,通过方法里传递参数和Bundle。
3.将初始化Fragment时用Bundle传入的参数,赋值给全局变量。
4.当我需要用到对应参数数据时,可以通过调用对应参数的全局变量来使用。
public class CustomFragmentextends Fragment {
//1.创建参数对应的全局变量,用于使用
@LayoutRes
private int sampleLayoutRes;
@LayoutRes
private int practiceLayoutRes;
//2.newInstance初始化Fragment,通过方法里传递参数和Bundle。
public static CustomFragment newInstance(@LayoutRes int sampleLayoutRes,@LayoutRes int practiceLayoutRes){
CustomFragment fragment = new CustomFragment();
Bundle args = new Bundle();
args.putInt("sampleLayoutRes",sampleLayoutRes);
args.putInt("practiceLayoutRes",practiceLayoutRes);
fragment.setArguments(args);
return fragment;
}
//3.将初始化Fragment时用Bundle传入的参数,赋值给全局变量。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if(null != args){
sampleLayoutRes = args.getInt("sampleLayoutRes");
practiceLayoutRes = args.getInt("practiceLayoutRes");
}
}
//4.当我需要用到对应参数数据时,可以通过调用对应参数的全局变量来使用。
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_page,container,false);
ViewStub sampleStub = (ViewStub) view.findViewById(R.id.sampleStub);
sampleStub.setLayoutResource(sampleLayoutRes);
sampleStub.inflate();
ViewStub practiceStub = (ViewStub) view.findViewById(R.id.practiceStub);
practiceStub.setLayoutResource(practiceLayoutRes);
practiceStub.inflate();
return view;
}
}
在activity里调用CustomFragment 时,就可以创建CustomFragment 对象时传递参数了。
PageFragment.newInstance(R.layout.sample_color, R.layout.practice_color)