2012-05-08 14 views
1

私は自分のres/folderにlayout-landという名前のフォルダを作成でき、Androidはこれを自動的に処理します。オリエンテーションがポートレートからランドスケープに変わったときに新しいアクティビティを呼びたいのですがどうしたらいいですか? は私が持っている:新しいオリエンテーションの活動Android

  • ボタンとscrollview
  • 複数のボタンが含まれている景観のためのXMLファイルで構成されてい肖像画のためのxmlファイル、textviews、 とedittexts
  • はどちらがメインと呼ばれています。 XML(しかし、彼らの敬意フォルダに)setContentView(main.xml)を呼び出し
  • 一つの活性

この活動は、しかし、すべてが、初期化する必要がありますトン、textviewsなど、しかし、私は向きをポートレートに戻すと、それらのボタンがそのxmlファイルにないので強制的に閉じます!

どうすればこの問題を回避できますか?

答えて

1

getResources().getConfiguration().orientationを使用して現在の方向を確認してください。 あなたのデバイスを傾けると、間違ったリソースを膨らませないようにすることができます。

- (!悪い)>http://developer.android.com/reference/android/content/res/Configuration.html#orientation

別のアプローチは、あなたの土地・レイアウトが使用されず、傾斜したときに別のアクティビティをプッシュすることができますので、onConfigurationChangedを上書きする可能性があります。そのようなもの:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    //push new activity via intent 
} 

しかし、これはお勧めできません。最初のアプローチを試してみて、これがあなたのために働いたと伝えてください。 ;)

1

トーマスの解決策はうまくいくはずですが、ポートレートモードとランドスケープモードの両方に共通のボタンが同じことをする場合は、findViewByID(...)がキャストしようとする前に/割り当ててください。このような何かが動作するはずfindViewByID(...)The view if found or null otherwise.のドキュメントから:チェックするためにするものではなく、あなたが唯一、一つの特性をチェックする必要があるため

Object x = findViewByID(R.id.something) != null; 
if(x != null) 
{ 
    //cast it to whatever it really is (textview, button, etc) 

    //Add whatever listeners you want 
} 

マインドあなた、私はまだトーマスのソリューションとなるだろうレイアウト間で異なるコントロールのそれぞれについてnullの場合

関連する問題