2011-09-19 53 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文件。如果我在橫向啓動應用程序,它將加載橫向文件,但如果我按下按鈕,它仍會崩潰。 –