1

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;
}

}

4

1 に答える 1

4

あなたが提案することの何が問題なのかというと、構成を変更するとデータが失われるということです。引数Bundleは自動的にフラグメントの保存されたインスタンスの状態の一部になるため、構成の変更時にデータが自動的に保持されます。そうしないと、デフォルトでは、ユーザーが画面を回転させたり、その他の構成を変更したりすると、ページ番号が失われます。

問題に対処する方法は他にもあります (たとえば、onSavedInstanceState() Bundle自分でページ番号を入力するなど)。ファクトリ メソッドと引数Bundleは、問題に対処する単純で効果的な方法ですが、唯一の方法ではありません。

于 2013-07-17T14:14:22.170 に答える