重载 Fragment的构造方法会报以下错误。
Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead less... (Ctrl+F1)
From the Fragment documentation: Every fragment must have an empty constructor, so it can be instantiated when restoring its activity's state. It is strongly recommended that subclasses do not have other constructors with parameters, since these constructors will not be called when the fragment is re-instantiated; instead, arguments can be supplied by the caller with setArguments(Bundle) and later retrieved by the Fragment with getArguments(). More info: http://developer.android.com/reference/android/app/Fragment.html#Fragment()
解决方法参考如下:
/**
* Returns a new instance of this fragment for the given section
* number.
*/
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
创建一个 newInstance 方法来避免使用构造来传参数。
在onCreatView中使用参数的方法:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tabbed,
container, false);
TextView textView = (TextView) rootView.findViewById(R.id.section_label);
textView.setText(getString(R.string.section_format,
getArguments().getInt(ARG_SECTION_NUMBER)));
return rootView;
}
最后调用方法:
PlaceholderFragment.newInstance(position);
end.

本文介绍了如何避免在Android开发中为Fragment使用非默认构造方法,从而解决重建活动状态时出现的问题。通过创建newInstance方法传递参数,并在onCreateView中获取这些参数。

660

被折叠的 条评论
为什么被折叠?



