Android - 在横向和纵向模式之间切换会使Intent失去价值

los*_*sit 20 android landscape-portrait android-orientation

我正在使用Intents在我的Android应用程序中切换活动.我将数据放入Intent以用于下一个活动.当我在横向和纵向模式之间切换手机时,从意图传递的值将丢失,我得到NullPointerException.

有人可以告诉我可能有什么问题.

有很多代码可以完全发布.但如果有人需要查看代码的特定部分,我可以在此处发布.

编辑
我解决了状态未被保存的问题.但我遇到的另一个问题是,在方向改变后屏幕上没有任何按钮工作.按下按钮,我在LogCat中收到此警告

02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0
Run Code Online (Sandbox Code Playgroud)

请帮忙.

Qui*_*son 25

切换方向时,将重新创建活动并调用onCreate,因此您必须使用捆绑包来保存当前状态并在方向更改后恢复.如果您只有一个带有TextView的应用程序并输入文本并更改方向,则可以看到此操作.如果你为onCreate捆绑你的州,你可以遏制这个.这可能也是您在方向更改后拥有NullPointer的原因.这很烦人,但我们不得不忍受.

这个关于一系列定向教程的链接,尤其是第一个定向教程,应该可以帮助您准确了解正在发生的事情以及如何成功维护当前状态.

更新:还有一篇关于在Android上进行SO 活动重启的帖子,它几乎处理相同的事情.

编辑后续问题:

在方向更改后,您是否重新附加了点击处理程序?


Hul*_*ulk 9

在你的清单文件中写下你想要的活动 -

 android:configChanges="orientation|keyboardHidden"
Run Code Online (Sandbox Code Playgroud)

编辑:将此版本用于新的API版本 -

android:configChanges="orientation|keyboardHidden|screenSize"
Run Code Online (Sandbox Code Playgroud)

肯定会有效..


小智 5

试试这个:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(SOME_KEY, "blah blah blah");
}

@Override
public void onCreate(Bundle savedInstanceState) {
   ...
   somevalue = savedInstanceState.getString(SOME_KEY);
   ...
}
Run Code Online (Sandbox Code Playgroud)