用户在Organization seeks Demand
Demand itemOffered Service
为我的应用输入参数(如下所示)后,他点击MainActivity
,调用Search
,在新屏幕上生成输出(如下所示),通过点击MatchesActivity
退出。
但是back
处于有效状态,每次旋转设备时,MatchesActivity
都会再次执行,因为Search
会重新启动。在下面的屏幕截图中,我将设备从垂直旋转到水平,从垂直到水平再旋转到垂直。
输出是在Activity
中生成的,MatchesActivity
在onCreate
中调用,如下所示:
MainActivity
以下是Intent matchesIntent;
matchesIntent = new Intent(MainActivity.this, MatchesActivity.class);
startActivity(matchesIntent);
的{{1}}的精髓:
onCreate
我做了研究。我发现了一些复杂的方法可以防止活动在设备旋转时重新启动。 For example。
我希望有一个更简单的解决方案。有什么想法吗?
答案 0 :(得分:1)
正如您所发现的,一个选项是阻止在配置更改上一起重新创建活动。这并不总是最好的选择,因为这样可以防止根据配置重新设置/重新加载其他内容(例如,使用“-land”限定符覆盖资源)。
另一种选择是以某种方式缓存数据库搜索的结果。这可以通过在数据库周围添加一个包装器来完成,该包装器记忆上次搜索的术语和结果。缓存结果的另一种方法是使用片段,并在活动重新创建中重用该片段。是否通过此方法控制片段是否与其活动一起重新创建: http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
答案 1 :(得分:0)
我的解决方案很简单。
介绍boolean
变量outputIsShowing
,在true
onCreate
终止时将其设置为MatchesActivity
,并在false
时设置onCreate
或onResume
在MainActivity
中执行(即MatchesActivity
终止时),如果onCreate
为MatchesActivity
,则outputIsShowing
会立即返回true
MatchesActivity
。
因此,如果在设备轮换时outputIsShowing
处于活动状态,则 @Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// usual details prior to asking for matches
if(outputIsShowing)
return;
MainActivity.dbc.setDbProcesslistener(this); // to know matches was defined
MainActivity.dbc.findDBMatches();
outputIsShowing = true;
}
将为真,因此请勿再次执行。
这可能不是最佳做法,但我在正常条件下进行了广泛的测试,到目前为止我已经足够开心了。不确定是否有任何东西潜伏在那里作为"陷阱"。
我打算回去研究迄今为止提出的建议,因为更一般的情况绝对重要。如果有人对我所做的事情有所了解,我将不得不这样做。
TextView
*编辑*
奇怪的是,在txaMatches
中嵌入ScrollView
outputIsShowing
以实现平滑,加速的滚动后,我不得不删除对Search
的引用,以便在两个之后看到输出设备方向改变。
现在,也许我还会提交另一个问题来解决这样一个事实,即在屏幕保护程序强制唤醒设备后,输出不会显示当屏幕保护程序变为活动状态时焦点是什么。点击'回归'进入用户输入屏幕,然后立即点击body {
position: relative;
}
#section1 {padding-top:50px;height:500px;color: #fff; background-color: #1E88E5;}
#section2 {padding-top:50px;height:500px;color: #fff; background-color: #673ab7;}
#section3 {padding-top:50px;height:500px;color: #fff; background-color: #ff9800;}
#section41 {padding-top:50px;height:500px;color: #fff; background-color: #00bcd4;}
#section42 {padding-top:50px;height:500px;color: #fff; background-color: #009688;}
恢复所有正常,直到大约100(给予或接受)屏幕保护程序实例后,输出再次丢失。
这样的错误让我觉得我应该遵循上面的建议。
如果我这样做,或者当我发现问题时,我会再次编辑它。