【发布时间】: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