Android DialogFragment生命周期,实际上对用户完全可见

时间:2015-09-14 18:31:43

标签: android android-fragments android-dialogfragment

我有自定义视图的自定义布局(类CaseView)。每个CaseView都由一个数据对象(类Case)支持(一个Case对象可以有多个CaseViews绘制它)。 Case对象具有状态变量,可以设置,CaseViews(绘制THIS对象)根据此状态变量以不同方式绘制。
当单击我的CaseView时,我打开一个DialogFragment,其中另一个CaseView采用对话框布局,由同一个Case对象支持。
问题是,我想改变我打开的Case状态。 (就我而言,这只会将CaseView颜色从灰色变为黄色)。这也将改变我初始布局中单击的CaseView的颜色(它们都由同一对象支持)。
这是问题:如果我希望只有当用户在屏幕上完全看到我的Dialog时才更改CaseView颜色,我应该使用哪种方法来实际使用DialogFragment(或任何其他方法)来更改Case的状态变量?
我尝试重写onStart和onResume of DialogFragment来改变状态,尽管在我的初始布局中按下的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()

A CasView in layout (pointed by green arrow) becomes yellow before I can see DialogFragment

1 个答案:

答案 0 :(得分:0)

似乎我找到了出路 在我的Dialog中添加了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自定义动画),尽管它要好得多。