gpt4 book ai didi

android - 在 DialogFragment 在内存不足时被杀死后重新创建后关闭它

转载 作者:行者123 更新时间:2023-11-29 02:40:24 25 4
gpt4 key购买 nike

我的 DialogFragment 有一个监听器,我从一些 ActivityFragment 传递它。
因此,使用下面的当前代码,如果我打开此对话框然后转到后台并将其放置很长时间或将设备置于内存不足的状态,对话框将会清晰。
然后当我再次打开应用程序并按 btnOK 时,我将得到 NullPointerException 因为 listener = null

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

为了防止它,我会在重新创建 DialogFragment 时关闭它。

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
dismiss();
}
}

它在 fragment 销毁和重新创建的情况下效果很好,但我不知道这个解决方案是否适用于所有情况?我关闭了 onCreate() 中的对话框,所以我担心如果在某些情况下我不处理用户永远无法打开对话框。
任何帮助或建议将不胜感激。

最佳答案

如果 Activity 被销毁,您可以关闭该对话框。

只需将其添加到您的对话框 fragment 中即可。

@Override
public void onSaveInstanceState(Bundle outState) {
dismissAllowingStateLoss();
super.onSaveInstanceState(outState);
}

关于android - 在 DialogFragment 在内存不足时被杀死后重新创建后关闭它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44583467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com