如何防止设备轮换生成重复输出?

时间:2016-01-16 13:37:29

标签: android rotation oncreate

用户在Organization seeks Demand Demand itemOffered Service 为我的应用输入参数(如下所示)后,他点击MainActivity,调用Search,在新屏幕上生成输出(如下所示),通过点击MatchesActivity退出。

enter image description here

但是back处于有效状态,每次旋转设备时,MatchesActivity都会再次执行,因为Search会重新启动。在下面的屏幕截图中,我将设备从垂直旋转到水平,从垂直到水平再旋转到垂直。

enter image description here 看起来很傻。

输出是在Activity中生成的,MatchesActivityonCreate中调用,如下所示:

MainActivity

以下是Intent matchesIntent; matchesIntent = new Intent(MainActivity.this, MatchesActivity.class); startActivity(matchesIntent); 的{​​{1}}的精髓:

onCreate

我做了研究。我发现了一些复杂的方法可以防止活动在设备旋转时重新启动。 For example

我希望有一个更简单的解决方案。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

正如您所发现的,一个选项是阻止在配置更改上一起重新创建活动。这并不总是最好的选择,因为这样可以防止根据配置重新设置/重新加载其他内容(例如,使用“-land”限定符覆盖资源)。

另一种选择是以某种方式缓存数据库搜索的结果。这可以通过在数据库周围添加一个包装器来完成,该包装器记忆上次搜索的术语和结果。缓存结果的另一种方法是使用片段,并在活动重新创建中重用该片段。是否通过此方法控制片段是否与其活动一起重新创建: http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

答案 1 :(得分:0)

我的解决方案很简单。

介绍boolean变量outputIsShowing,在true onCreate终止时将其设置为MatchesActivity,并在false时设置onCreateonResumeMainActivity中执行(即MatchesActivity终止时),如果onCreateMatchesActivity,则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(给予或接受)屏幕保护程序实例后,输出再次丢失。

这样的错误让我觉得我应该遵循上面的建议。

如果我这样做,或者当我发现问题时,我会再次编辑它。