我有兩個佈局,一個用於橫向肖像。對於縱向我有它在佈局文件夾和景觀下我有它在layout-land文件夾下。兩者都具有相同的名稱main.xml。切換從縱向到橫向沒有任何錯誤發生。同樣,當我從橫向切換到縱向時,出於某種原因,它不加載基於縱向的佈局,無法找到我定義的根佈局。下面是logcat的輸出\將佈局從縱向切換到橫向模式時出現問題
07-27 15:25:09.601: WARN/System.err(278): java.lang.ClassCastException: android.widget.LinearLayout
07-27 15:25:10.230: WARN/System.err(278): at com.me2youmob.swagwrap.ChickenWrapActivity.loadMBIIntoView(ChickenWrapActivity.java:102)
07-27 15:25:10.230: WARN/System.err(278): at com.me2youmob.swagwrap.ChickenWrapActivity.onCreate(ChickenWrapActivity.java:41)
07-27 15:25:10.230: WARN/System.err(278): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-27 15:25:10.250: WARN/System.err(278): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-27 15:25:10.250: WARN/System.err(278): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-27 15:25:10.250: WARN/System.err(278): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815)
07-27 15:25:10.311: WARN/System.err(278): at android.app.ActivityThread.access$2400(ActivityThread.java:125)
07-27 15:25:10.311: WARN/System.err(278): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037)
07-27 15:25:10.311: WARN/System.err(278): at android.os.Handler.dispatchMessage(Handler.java:99)
07-27 15:25:10.322: WARN/System.err(278): at android.os.Looper.loop(Looper.java:123)
07-27 15:25:10.322: WARN/System.err(278): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-27 15:25:10.329: WARN/System.err(278): at java.lang.reflect.Method.invokeNative(Native Method)
07-27 15:25:10.329: WARN/System.err(278): at java.lang.reflect.Method.invoke(Method.java:521)
07-27 15:25:10.361: WARN/System.err(278): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-27 15:25:10.361: WARN/System.err(278): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-27 15:25:10.371: WARN/System.err(278): at dalvik.system.NativeStart.main(Native Method)
這是存在的代碼中的onCreate是如下
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int deviceRotation = getWindowManager().getDefaultDisplay().getRotation();
Utils.spPreferences = getSharedPreferences(Utils.PREFS_NAME, 0);
if (deviceRotation == 1)
{
int imgID = Utils.getMbiIndex("mbiIndex");
int drawBgId = Utils.getMbiDrawIndex(imgID);
try
{
ImageView ivLandView = (ImageView) findViewById(R.id.ivLandMbi);
ivLandView.setImageResource(drawBgId);
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
loadMBIIntoView();
handleButtonClicks();
}
}
happenson其中代碼如下
public void loadMBIIntoView()
{
int imgID = Utils.getMbiIndex("mbiIndex");
int drawBgId = Utils.getMbiDrawIndex(imgID);
try {
RelativeLayout llMain = (RelativeLayout) findViewById(R.id.rlMain);
Resources res = getResources();
Drawable drawMbi = res.getDrawable(drawBgId);
llMain.setBackgroundDrawable(drawMbi);
} catch (Exception e) {
e.printStackTrace();
}
}
的橫向佈局的loadMBIIntoView方法的錯誤沒有rlMain佈局本身,但肖像確實。如果活動正在重新啓動(這對我來說很好),每當我更改屏幕模式時,不應該自動加載適當的佈局?我將不勝感激任何幫助。謝謝。
更新:02:00 PM
我加入了代碼,但它還是給了同樣的錯誤。由於將線性佈局轉換爲相對佈局而導致錯誤消失,這就是問題所在。縱向佈局(「main.xml」)位於其默認的「佈局」文件夾中。該佈局具有相對佈局(「rlmain」)。橫向佈局(「main.xml」)駐留在layout-land文件夾中。這個main.xml具有不同的UI規範,並具有線性佈局。默認情況下,我在縱向模式下加載它加載正常,我按下Ctrl + F11將其更改爲橫向,layout-land文件夾中的佈局加載正常。然後我再次按下Ctrl + F11以更改爲縱向,其中默認佈局文件夾中的main.xml應該已加載,但未加載,這就是爲什麼我得到案例異常。
景觀文件不包含rlMain? Android會自動在佈局和佈局區域中切換佈局,但不會創建不在那裏的佈局。如果rlMain不在橫向文件中,findViewById(R.id.rlMain)將返回null,並且在嘗試使用它時會出錯。 – theisenp
是的風景文件不包含rlMain。我已經將約束放在適當的位置,以便在激活橫向模式時不調用rlMain。當我應該加載縱向佈局並且應該能夠找到rlMain時,我切換回縱向模式時出現錯誤。 – vikramjb
明白了。那麼ChickenWrapActivity的第102行是什麼? – theisenp