我正在重写我的Android
应用程序,以消除对onResume()
的直接调用。
我的应用程序目前大部分工作都在onResume()
内完成,然后将显示内容发布,这就是onResume()
的结束。
@Override
public void onResume() {
super.onResume();
// get current date and time,
// and determine if daylight savings time is in effect.
//...600 lines of code
// output both the chart and report
//
image.setImageBitmap(heightChart);
report.setImageBitmap(reportBitmap);
}
下一步是收集用户输入,这告诉我用户希望报告做出哪些更改(可能是新位置、新日期或新显示样式等)。具体操作如下:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final int STATION_REQUEST = 1;
int test = 1;
switch (item.getItemId()) {
case R.id.refresh: {
userDateSet = false;
onResume();
return true;
} // come to the present.
//...200 lines of code
default:
return super.onOptionsItemSelected(item);
}
}
正如这个示例所展示的,确定新用户命令后通过调用onResume()
来重新生成输出。这是不好的实践,我已经知道了!!然而目前为止它表现良好,我真的不明白它的问题所在。
我考虑的解决方案是将这600行代码聚合到单独的程序中,并在onResume()
和onOptionsItemSelected()
的多个点中调用该程序。
@Override
public void onResume() {
super.onResume();
myOnResumeCode();
}
在 onOptionsItemSelected()
内部执行以下操作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final int STATION_REQUEST = 1;
int test = 1;
switch (item.getItemId()) {
case R.id.refresh: {
userDateSet = false;
myOnResumeCode();
return true;
} // come to the present.
... // Other statements
}
这种方法可行吗?如果不行,除了“重新编写整个代码”之外,是否有其他建议可以帮助我解决问题。我已经广泛地搜索了干净的解决方案,但却没有找到一个我能理解的。谢谢。