風景用のポートレート用に2つのレイアウトがあります。似顔絵の場合はレイアウトフォルダの下にあり、風景の場合はレイアウトランドフォルダの下にあります。どちらも同じ名前のmain.xmlを持ちます。肖像画から風景へのいかなる誤りもなくスイッチングが起こる。私がランドスケープからポートレートに切り替えるとき、何らかの理由でポートレートベースのレイアウトをロードせず、私が定義したルートレイアウトを見つけることができません。ここでLogcat出力はレイアウトをポートレートモードからランドスケープモードに切り替えるときの問題
@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();
}
}
エラーが
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方法をhappensonを次のようにのonCreateにありますコードがある
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)
\ですrlMainレイアウト自体はありませんが、ポートレートはありません。私が画面モードを変更するたびに、アクティビティが再開されていれば(自動的に適切なレイアウトを読み込まないでください)私はこれについて何か助けていただければ幸いです。ありがとうございました。
UPDATE:二時PM
私は、コードを追加しましたが、そのはまだ同じエラーを与えます。リニアレイアウトを相対レイアウトにキャストするためにエラーが発生します。これが問題の原因です。ポートレートレイアウト( "main.xml")はデフォルトの "layout"フォルダにあります。このレイアウトには相対レイアウト( "rlmain")があります。ランドスケープレイアウト( "main.xml")はlayout-landフォルダにあります。このmain.xmlは異なるUI仕様を持ち、線形レイアウトを持っています。デフォルトでは、ポートレートモードでロードし、Ctrl + F11を押してLandscapeに変更すると、layout-landフォルダのレイアウトが正常に読み込まれます。次に、Ctrl + F11をもう一度押して、デフォルトのレイアウトフォルダのmain.xmlがロードされているがロードされていない場合に、ケース例外を取得する理由をPortraitに変更します。
ランドスケープファイルにrlMainが含まれていませんか? Androidは自動的にレイアウトとレイアウトランドのレイアウトを切り替えますが、そこにないレイアウトは作成されません。 rlMainがランドスケープファイルにない場合、findViewById(R.id.rlMain)はnullを返し、使用しようとするとエラーが発生します。 – theisenp
はい、ランドスケープファイルにrlMainが含まれていません。私は、風景モードがアクティブになったときにrlMainが呼び出されないように制約を設定しました。ポートレートモードに切り替えると、ポートレートのレイアウトをロードする必要があり、rlMainを見つけることができるはずです。 – vikramjb
入手しました。 ChickenWrapActivityの102行目には何がありますか? – theisenp