【问题标题】:Android DialogFragment lifecycle when it is actually fully visible to userAndroid DialogFragment 生命周期实际上对用户完全可见
【发布时间】:2015-12-10 20:32:58
【问题描述】:

我有一个带有自定义视图的自定义布局(CaseView 类)。每个 CaseView 都由一个数据对象(Case 类)支持(一个 Case 对象可以有多个 CaseView 绘制它)。 Case 对象具有可以设置的状态变量,并且 CaseViews(绘制 THIS 对象)基于此状态变量以不同的方式绘制自己。
当我的 CaseView 被单击时,我会在对话框布局中打开一个带有另一个 CaseView 的 DialogFragment,由同一个 Case 对象支持。
问题是,我想改变我打开的案例状态。 (就我而言,这只会将 CaseView 颜色从灰色更改为黄色)。这也会改变我初始布局中单击的 CaseView 的颜色(它们都由同一个对象支持)。
问题来了:如果我希望仅在用户完全看到我的情况下更改 CaseView 颜色,我应该使用 DialogFragment 的哪种方法(或任何其他方法)来更改 Case 的状态变量屏幕上的对话框?
我尝试覆盖 DialogFragment 的 onStart 和 onResume 以更改状态,尽管在这两种情况下,我的初始布局中按下的 CaseView 都会改变颜色,然后我什至可以在屏幕上看到我的 DialogFragment。
请看图片:布局中的 CaseView(由绿色箭头指向)在我真正看到屏幕上的 DialogFragment 之前变为黄色。

这就是我重写 DialogFragment 的 onResume 方法的方式:

    @Override
    public void onResume() {
        super.onResume();
        if (mCase.getCurrentState() != BankManager.STATE_OPENED) {
            mCase.setCurrentState(BankManager.STATE_OPENED); //STATE_OPENED mean drawing yellow
        }
    }

Case#setCurrentState(int) 将在绘制此 Case 对象的所有 CaseView(他知道)上调用 View#Invalidate()

【问题讨论】:

    标签: android android-fragments android-dialogfragment


    【解决方案1】:

    看来我找到了出路。
    在我的对话框中添加了DialogInterface.OnShowListener,并在那里做我的工作。

        //in DialogFragment#onCreateDialog
    
        //...
        Dialog dialog = builder.create();
    
        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                openShowedCase(); //doing all my state changing there
            }
        });
    
        return dialog;
    

    当我看到我在布局内 CaseView 上的更改时,我的 DialogFragment 正在弹出一些动画(我想那是一些 FragmentTransaction 自定义动画),尽管它要好得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2021-09-14
      • 2013-04-06
      • 1970-01-01
      • 2016-07-03
      相关资源
      最近更新 更多