首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >方向更改后Android DialogFragment消失?

方向更改后Android DialogFragment消失?
EN

Stack Overflow用户
提问于 2018-09-05 00:43:26
回答 2查看 0关注 0票数 0

我有一个FragmentActivity支持v4类,它实现了两个并排(类似gmail)片段和一个可以调出DialogFragment的按钮。

除非我有方向改变,否则这一切都很有效。当我有方向更改时,不会保存片段的状态。

主要问题是如果我打开了FragmentDialog,它就会消失。

我已经设置setRetainInstance(true);了所有碎片,但它没有帮助。

在我的清单中,我包括android:configChanges="orientation"但仍然没有帮助。

以下是我的代码示例,感谢您的帮助。

代码语言:javascript
复制
public class AddMasterDialog extends DialogFragment {

    private int mTitle;
    private int mPrompt;
    private OnClickListener onSaveListener;
    private OnClickListener onCancelListener;

    public AddMasterDialog newInstance(int title, int prompt) {
        AddMasterDialog simpleDialog = new AddMasterDialog(title, prompt);
        return simpleDialog;
    }

    public AddMasterDialog() {
        // Empty constructor required for DialogFragment
    }
    public AddMasterDialog(int title, int prompt) {
        // Empty constructor required for DialogFragment
        mTitle = title;
        mPrompt = prompt;
    }
    public void setSaveButton(OnClickListener save){
        onSaveListener = save;
    }
    public void setCancelButton(OnClickListener cancel){
        onCancelListener = cancel;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        //if(savedInstanceState == null){
            View view = inflater.inflate(R.layout.add_new_simple, container);
            getDialog().setTitle(mTitle);
            ((TextView) view.findViewById(R.id.add_simple_new_value_prompt)).setText(mPrompt);

            Button saveButton = (Button) view.findViewById(R.id.add_simple_save_button);
            saveButton.setOnClickListener(onSaveListener);

            //Cancel Button
            Button cancelButton = (Button) view.findViewById(R.id.add_simple_cancel_button);
            cancelButton.setOnClickListener(onCancelListener);
            return view;
        //}
    }
}

在我的主要活动中:

代码语言:javascript
复制
private void initiateAddMasterPopupWindow() {
        try {
            addMasterDialog = new AddMasterDialog(R.string.add_new_master_dialog_title, R.string.add_master_new_value_prompt);
            addMasterDialog.setSaveButton(saveNewMasterClickListener);
            addMasterDialog.setCancelButton(cancelNewMasterClickListener);
            FragmentManager fm = getSupportFragmentManager();
            addMasterDialog.show(fm, ADD_NEW_MASTER);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
EN

Stack Overflow用户

发布于 2018-09-05 09:10:40

好的,所以问题似乎与DialogFragment兼容性库有关。

这篇文章描述了这个问题。

“片段的过时DISMISS消息保留在消息队列中。它在排除DialogFragment.onDestroyView()旧对话框时排队,并在创建新对话框后重新激活。

快速(可能是脏的)解决方法是onDestroyView()在调用之前覆盖并清除dismiss监听器super.onDestroyView()

将以下代码添加到我的DialogFragment解决了这个问题:

代码语言:javascript
复制
 @Override
 public void onDestroyView() {
     if (getDialog() != null && getRetainInstance()) {
         getDialog().setDismissMessage(null);
     }
     super.onDestroyView();
 }
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档