【问题标题】:Application crashes when activity starts in landscape modeActivity 在横向模式下启动时应用程序崩溃
【发布时间】:2014-04-26 19:59:54
【问题描述】:

我有一个应用程序。主要活动有一个带有按钮的页面。此按钮仅打开另一个活动。这就是问题所在。当我在纵向模式下执行此操作时,它可以完美运行。即使在活动开始后,我也可以将其更改为横向模式并且效果很好。应用程序仅在第一个活动处于横向模式时崩溃,我单击按钮启动新活动。任何想法我应该如何解决这个问题?为什么它仅在启动期间不起作用?为什么在我以纵向模式启动后它在横向模式下工作正常?

我注意到另一个有趣的事情,我删除了横向文件夹中的布局 xml 文件,它不再崩溃了。

04-26 15:09:50.558: E/AndroidRuntime(7034): FATAL EXCEPTION: main
04-26 15:09:50.558: E/AndroidRuntime(7034): Process: com.example.msapp2, PID: 7034
04-26 15:09:50.558: E/AndroidRuntime(7034): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.msapp2/com.example.msapp2.exercises.WorkoutBuddy}: java.lang.NullPointerException
04-26 15:09:50.558: E/AndroidRuntime(7034):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-26 15:09:50.558: E/AndroidRuntime(7034):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-26 15:09:50.558: E/AndroidRuntime(7034):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-26 15:09:50.558: E/AndroidRuntime(7034):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)

【问题讨论】:

  • 你有堆栈跟踪吗?或者一些可以帮助我们调查这个问题的代码?
  • 肯定需要onCreate() 看看发生了什么。
  • 我不知道为什么会这样。你想要布局xml文件吗?还是活动代码?活动中发生了很多事情,很难说是什么导致了它的崩溃。但是一旦以纵向模式启动,它就可以流畅地工作。我的第二个活动中没有实现 onConfigurationChanged() 方法,并且横向布局文件夹中也没有活动的布局文件
  • 看看你的 LogCat。它有很多话要说。当应用程序崩溃时,进入 LogCat 的“错误”模式并仔细阅读打印的内容。 :) 这将使您找到问题的根本原因。如果您仍然无法自行修复,请在此处发布,会有人提供帮助。

标签: android android-layout android-activity landscape-portrait


【解决方案1】:

可能发生的情况是,您可能会获得对存在于纵向 (/layouts/activity*.xml) 布局中但不存在于横向布局 (/layouts-land/) 中的布局元素的引用活动*.xml)。

例如,

Button button = (Button) findviewbyid(R.id.myButton);

如果您是纵向的,可能会起作用,因为其中有一个 <Button /> 元素。但是您的横向布局没有相同的元素。

这会导致NullPointerException,这是您遇到的例外情况。当您尝试访问尚未初始化的对象时会发生这种情况。所以要注意你在哪里做的。

【讨论】:

  • 我从字面上将我的 xml 内容从纵向复制粘贴到横向,并在位置上移动。所有元素都存在于横向和纵向 xml 文件中。我会仔细检查。这是一个很好的观点
  • 有时当您更改布局文件时,您需要清理您的项目。你也可以试试。并检查您的 android:id 值是否在文件之间没有改变。
  • 另外,您知道如何更改用户在活动中时的方向时要使用的布局文件吗?我知道这与 onConfigurationChanged() 方法有关。我应该在我的 onConfigurationChanged() 方法中做一个 setContentView(R.layout.landscape_layout) 吗/对不起,我对这一切都不熟悉。
  • 通常你不必在 onConfigurationChanged 中使用 setContentView,因为 onCreate 通常会在配置更改时被调用
猜你喜欢
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多