質問

未知のサイズのArrayList<DialogFragment>を含むDialogFragmentがある場合は、最初のものが却下されると、次のものが表示され、次のものが表示されるようにプログラム的にキューを作成できます。?

for (int i = 0; i < tutorialViews.size(); i++) {
    final int current = i;
    DialogFragment someDialogFragment = dialogFragmentList.get(i);

    if (i == 0) {
        someDialogFragment .show(activity.get().getSupportFragmentManager(), "some_dialog_fragment");
    } 

    if (i + 1 != dialogFragmentList.size() - 1) {
        someDialogFragment.getDialog().setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface arg0) {
                dialogFragmentList.get(current + 1).show(activity.get().getSupportFragmentManager(), "more_dialog_fragments");
            }
        });
    }
}
.

dialog内のdialogFragmentオブジェクトがまだインスタンス化されていないため、これは機能しません。

nullPointerExceptionを参照してください。

役に立ちましたか?

解決

FragmentDialogが閉じられたときに、コールバックに独自のインターフェースを作成します。

OnDialogFragHide mListener;

public interface OnDialogFragHide {
    public void onFragmentDismissed();
}

public void setOnFragDismissedListener(OnDialogFragHide listener) {
    mListener = listener;
}
.

for Loop

にインタフェースを登録する
if (i == 0) {
    tutorial.show(activity.get().getSupportFragmentManager(), "smoking_hawt");
} 

if (i != tutorialViews.size() - 1) {
    tutorial.setOnFragDismissedListener(new OnDialogFragHide() {
        @Override
        public void onFragmentDismissed() {
            tutorialViews.get(current + 1).show(activity.get().getSupportFragmentManager(), "some_tag");
        }
    });
}
.

フラグメントが閉じられるたびに(つまり、 FragmentDialog onDismiss()メソッドとonCancel()メソッドではいつでも)呼び出しを呼び出します。onDismiss / onCancelリスナー

@Override
public void onDismiss(DialogInterface dialog) {
    if (mListener != null && !dismissed) {
        dismissed = true;
        mListener.onFragmentDismissed();
    } else {
        Log.e(TAG, "DialogFragmentDismissed not set");
    }
    super.onDismiss(dialog);
}

@Override
public void onCancel(DialogInterface dialog) {
    if (mListener != null && dismissed) {
        dismissed = true;
        mListener.onFragmentDismissed();
    } else {
        Log.e(TAG, "DialogFragmentDismissed not set");
    }
    super.onCancel(dialog);
}
.

dismissed Booleanはリスナーを2回呼ばないようにするための良い方法のためのものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top