私のDialogFragment
には、Activity
またはFragment
から渡すリスナーがあります。
この現在のコードでは、このダイアログを開いてバックグラウンドに移動し、長時間または低メモリにデバイスを置くとダイアログがクリアされます。私はbtnOK
で再び押しアプリを開いたときに、それを防ぐためにためlistener
= nullを低メモリで死んで再作成した後にDialogFragmentを閉じます。
public class Dialog extends DialogFragment {
DialogListener listener;
public static Dialog newInstance(String title, DialogListener listener) {
Bundle args = new Bundle();
Dialog fragment = new Dialog();
fragment.setArguments(args);
fragment.setListener(listener);
return fragment;
}
public void setListener(DialogListener listener) {
this.listener = listener;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
dismiss();
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.dialog_view, container);
Button btnOK = (Button) rootView.findViewById(R.id.btnOK);
btnOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onClick();
dismiss();
}
});
return rootView;
}
interface DialogListener {
void onClick();
}
}
その後、私はNullPointerException
を取得することは同じように再作成するとき、私はDialogFragmentを解任します。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
dismiss();
}
}
それは破壊と再作成する場合フラグメントでうまく動作しますが、このソリューションは、すべてのケースではうまく機能しなければ、私は知らないのですか?私はonCreate()
の中のダイアログを閉じ込めるので、私は恐らくダイアログを開くことができないユーザを扱わない場合があることを恐れている。
ご意見やご提案をいただければ幸いです。
私たちはできません。 onSaveInstanceState(...)内のダイアログを閉じると、java.lang.IllegalStateExceptionが発生します:onSaveInstanceStateの後にこのアクションを実行できません –
私は自分の答えを編集しました。今すぐお試しいただけますか? –
あなたが 'onSaveInstanceState()'で却下したいのであれば、あなたは 'onPause()'でそれを行うことができます。 – mac229