我不知道他们为什么使用工厂方法来创建 ScreenSlidePageFragment 的实例。在构造函数中传递 pageNumber 并将其分配给 mPageNumber 有什么问题,当然还要摆脱这个工厂方法和 ARG_PAGE?! 这是代码:
public class ScreenSlidePageFragment extends Fragment {
/**
* The argument key for the page number this fragment represents.
*/
public static final String ARG_PAGE = "page";
/**
* The fragment's page number, which is set to the argument value for {@link #ARG_PAGE}.
*/
private int mPageNumber;
/**
* Factory method for this fragment class. Constructs a new fragment for the given page number.
*/
public static ScreenSlidePageFragment create(int pageNumber) {
ScreenSlidePageFragment fragment = new ScreenSlidePageFragment();
Bundle args = new Bundle();
args.putInt(ARG_PAGE, pageNumber);
fragment.setArguments(args);
return fragment;
}
public ScreenSlidePageFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPageNumber = getArguments().getInt(ARG_PAGE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout containing a title and body text.
ViewGroup rootView = (ViewGroup) inflater
.inflate(R.layout.fragment_screen_slide_page, container, false);
// Set the title view to show the page number.
((TextView) rootView.findViewById(android.R.id.text1)).setText(
getString(R.string.title_template_step, mPageNumber + 1));
return rootView;
}
/**
* Returns the page number represented by this fragment object.
*/
public int getPageNumber() {
return mPageNumber;
}
最佳答案
按照您的建议进行操作的错误之处在于,数据将在配置更改时丢失。参数 Bundle
自动成为 fragment 的已保存实例状态的一部分,因此数据将在配置更改时自动保留。否则,默认情况下,当用户旋转屏幕或进行任何其他配置更改时,您会丢失页码。
还有其他方法可以解决该问题(例如,您自己将页码放入 onSavedInstanceState()
Bundle
中)。工厂方法和参数 Bundle
只是解决该问题的一种简单有效的方法,但这不是唯一的方法。
关于android - 在android示例中,为什么ScreenSlidePageFragment类使用工厂方法来创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702135/