请查看全部四张图片,前三张图片有错误屏幕,最后一张有Fragment构造函数。
https://i.stack.imgur.com/lbodG.png
https://i.stack.imgur.com/nysfG.png
答案 0 :(得分:0)
您必须具有Fragment的默认构造函数。
public class Tab1Fragment extends Fragment{
public Tab1Fragment(){
}
...
}
如果要将数据传递到片段,则必须通过 setArguments()进行操作,而不是通过构造函数传递数据,这不是一种好习惯。 而是尝试这样的事情:
public class Tab1Fragment extends Fragment{
private static final String ARG_URL = "url";
public Tab1Fragment(){
}
public static Tab1Fragment newInstance(String url) {
Tab1Fragment fragment = new Tab1Fragment();
Bundle args = new Bundle();
args.putString(ARG_URL, url);
fragment.setArguments(args);
return fragment;
}
}
并使用片段获取url值
getArguments().getString(ARG_URL);
现在使用newInstance方法获取片段实例。
Tab1Fragment.newInstance("your url");
答案 1 :(得分:0)
如@Mangal所述,一个Fragment必须具有默认(无参数)构造函数。要将数据传递到新片段,请使用静态函数,例如
public static MyFragment newInstance(String someData) {
MyFragment fragment = new MyFragment ();
Bundle args = new Bundle();
args.putString("someData", someData);
fragment.setArguments(args);
return fragment;
}
并像这样检索数据
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle args = getArguments();
String someData = "";
if( args != null ) {
someData = args.getString("someData", "");
}
}
然后,而不是调用
new MyFragment(data);
在创建片段的代码中,您应该调用
MyFragment.getInstance(data);