是否可以为同一个Fragment
提供两个不同的构造函数?
这是我的情况:我有Fragment_A
和Fragment_B
几乎完全相同,除了一个获得一个整数而另一个获得一个字符串。
我可以这样:
public static VideoListFragment newInstanceA(String filterString) {
VideoListFragment myFragment = new VideoListFragment();
Bundle args = new Bundle();
args.putString(FILTER, filterString);
myFragment.setArguments(args);
return myFragment;
}
public static VideoListFragment newInstanceB(String subjectId) {
VideoListFragment myFragment = new VideoListFragment();
Bundle args = new Bundle();
args.putString(POSITION, subjectId);
myFragment.setArguments(args);
return myFragment;
}
如果可以,那么我将如何进入onCreate()
这个论点?我以某种方式检查getArguments()`是否包含FILTER String或POSITION Integer。
答案 0 :(得分:2)
您不能使用完全相同的方法签名来区分不同的输入行为。但是,您可以扩展输入参数以使其更加通用。这样的事情会有所帮助:
public class VideoListFragment extends Fragment {
public static VideoListFragment newInstance(String type, String val) {
VideoListFragment myFragment = new VideoListFragment();
Bundle args = new Bundle();
args.putString(type, val);
myFragment.setArguments(args);
return myFragment;
}
}
以后使用如下:
VideoListFragment frag1 = VideoListFragment.newInstance(FILTER, "value"); //for Filter
VideoListFragment frag2 = VideoListFragment.newInstance(POSITION, "value");//for Position
答案 1 :(得分:0)
Android文档在处理片段时不鼓励使用构造函数;你应该使用bundle。