2011-09-19 56 views
0

我在layout-land和layout-port文件夹中有两个main.xml文件,当手机方向改变时它强制重新加载main.xml。不同的方向变化布局

@Override 
    public void onConfigurationChanged(Configuration configure){ 
     super.onConfigurationChanged(configure); 
     setContentView(R.layout.main); 

它可以在纵向上正常工作,但在横向页面上按任意图像按钮都会导致应用程序崩溃。当按下按钮时,图像按钮都会将名为网格的图像更改为不同的图像。打开另一个页面的按钮在两种布局中都能正常工作。这是一个代码示例。

final ImageView imageView = (ImageView)findViewById(R.id.grid); 
// This is an imagebutton 
findViewById(R.id.plank).setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       imageView.setImageResource(R.drawable.gridplanks); 
      } 
    }); 
// This is a button that brings up a new page 
     findViewById(R.id.mcg).setOnClickListener(new OnClickListener() { 
      @Override 
       public void onClick(View view) { 
       startActivity(new Intent("com.example.minecraftcraftingguide.MCG")); 
       } 
}); 

这是你所需要的?编程新手,抱歉。

>09-18 22:20:46.688: ERROR/AndroidRuntime(334): FATAL EXCEPTION: main 
09-18 22:20:46.688: ERROR/AndroidRuntime(334): java.lang.NullPointerException 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at com.example.minecraftcraftingguide.Menu$1.onClick(Menu.java:27) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at android.view.View.performClick(View.java:2485) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at android.view.View$PerformClick.run(View.java:9080) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at android.os.Handler.handleCallback(Handler.java:587) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at android.os.Looper.loop(Looper.java:123) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-18 22:20:46.688: ERROR/AndroidRuntime(334):  at dalvik.system.NativeStart.main(Native Method) 
+0

我会建议设置一些断点,在调试模式下运行它并查看实际崩溃的原因是什么。我很确定每次旋转设备时都会调用onCreate,因此您应该尽可能完成上面所做的所有工作。 –

+0

请显示logcat输出,您正在收到什么错误。谢谢。 –

+0

我的猜测是你删除了这个setContentView。它不需要那里。按照此处的说明进行快速配置更改http://developer.android.com/resources/articles/faster-screen-orientation-change.html – the100rabh

回答

1

你有你的默认布局文件夹中的main.xml或只有两个在布局 - 端口和布局土地?

如果我是你,我会将文件从布局端口移动到默认布局文件夹。然后,如果应用处于横向文件夹中,应用将使用layout-land中的文件,否则(如果应用处于纵向模式)将在默认文件夹中使用该文件。

另一个提示:检查这两个xml文件中的拼写。也许你错过了一个按钮ID的字符。

+0

我将landscape-port main.xml移动到了默认布局文件夹,但现在所有的按钮都不能在横向上工作。该应用程序不会崩溃,他们只是没有功能。在方向改变时它也不会从风景切换回肖像。 –

+0

实际上,我在横向模式中发现了拼写错误,并且我之前评论过的“卡住横向模式”问题显然是模拟器的一个已知问题。它现在似乎正在工作。谢谢! –

0

你必须decalare在mainfest ConfigChanges,你不需要写在onOnfigurationChanged中的setContentView()()方法,事实上,在mainfest声明后,你不需要在你的程序写东西,在Android会自动获取驻留在layout-land xml文件中的横向xml文件。

因为无论何时调用setContentView(),都必须重新声明它的元素。

只是提到在mainfest,本次活动标签的android:configChanges = keyboardHidden |取向 或 不要写任何东西在你的onConfigChanged()方法

+0

当我更改方向时,它不会更改xml文件。如果我在横向启动应用程序,它将加载横向文件,但如果我按下按钮,它仍会崩溃。 –