1. 程式人生 > >[Android][App]過載構造方法報錯(Avoid non-default constructors in fragments)

[Android][App]過載構造方法報錯(Avoid non-default constructors in fragments)

過載 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.