我有自定义视图的自定义布局(类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()
。
答案 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
自定义动画),尽管它要好得多。