Android にカスタム ダイアログがあります。onCreateView メソッドでダイアログ ビューを作成します。
public class FiltroDialog extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ダイアログを閉じようとすると、ダイアログ内に onClickListener によって呼び出されるメソッドがあります
boton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"doDismiss");
FiltroDialog.this.dismiss();
}
});
ダイアログで何が起こっているかを確認するために、ダイアログのいくつかの onMethods をオーバーライドしました。
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "onDestroyView");
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(TAG, "onAttach");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
Log.d(TAG,"onCancel");
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
Log.d(TAG,"onDismiss");
}
私はdismiss();でダイアログを閉じようとしました; rejectAllowingStateLoss(); FragmentTransaction を使用すると、毎回同じ結果が得られます。
D/FiltroDialog(30492): doDismiss
D/FiltroDialog(30492): onStop
D/FiltroDialog(30492): onDestroyView
D/FiltroDialog(30492): onDetach
しかし、ダイアログは画面から消えません。戻るボタンを使用すると、ダイアログは正しく消えますが、dismiss() または FragmentTransaction.remove メソッドを使用すると、Stop、DestroyView、Detach のみになりますが、onDismiss() にはなりません。
ボタンをもう一度クリックすると、これだけが LogCat に表示されます
D/FiltroDialog(30492): doDismiss
ダイアログを閉じる方法をいくつか試しました。これは、アクティビティからダイアログを表示するために使用するコードです(フラグメントからも試しました)
FiltroDialog newFragment = FiltroDialog.newInstance();
newFragment.show(getSupportFragmentManager(), TAG_DLG_FILTROS);
アクティビティからダイアログを閉じようとするコードは次のとおりです(フラグメントからも試行しましたが、同じ結果です)
DialogFragment prev = (DialogFragment) getSupportFragmentManager().findFragmentByTag(TAG_DLG_FILTROS);
if (prev != null) {
prev.dismiss();
}
これは、アクティビティから閉じようとする別の試みです(フラグメントからも試みましたが、同じ結果です)
Fragment prev = getSupportFragmentManager().findFragmentByTag(TAG_DLG_FILTROS);
if (prev != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.remove(prev);
ft.commit();
}
ここでは、DialogFragment 内のダイアログの cancel() メソッドを呼び出そうとして、ダイアログから閉じようとする別の試みを示します。
boton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"doDismiss");
FiltroDialog.this.getDialog().cancel();
}
});
ダイアログを閉じたり、onDismiss や Stop、DestroyView、Detach メソッドを呼び出したりしません。
これは、DialogFragment 内のダイアログの Dismiss() メソッドを呼び出そうとしているダイアログから閉じようとする別の試みです。
boton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"doDismiss");
FiltroDialog.this.getDialog().dismiss();
}
});
ダイアログを閉じたり、onDismiss や Stop、DestroyView、Detach メソッドを呼び出したりしません。
私はアプリにいくつかのダイアログを持っていますが、その問題は一度もありませんでした。私はAndroidプログラミングの初心者ではありませんが、何が間違っているのかわかりませんか? それは互換ライブラリのバグですか?