0

デバイスを回転させるとアプリがクラッシュします。画面を回転すると、描画して表示する新しいビューを作成しようとするため、クラッシュすることはわかっていますが、起動時にビューを作成して適切に表示するにはどうすればよいですか?2番目の新しいビューを作成しようとするとクラッシュしますか?

コードのどの部分をここに投稿すればよいかわかりません。この問題を解決する手がかりを教えていただけますか?


便利なものを見つけました。try/catch ステートメントを配置すると、デバイスを回転させてもクラッシュしませんが、空白のページが表示されます。古い位置に再回転すると、ページが表示されます。ここに私のコードがあります

@Override
protected void onCreate(Bundle savedInstanceState) {
    try{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);
    } catch (Exception e) {
        Log.i("my_error", e.getMessage());
    }
}

しかし、Eclipseは例外をキャッチできません。

どうすればこの問題を解決できますか?

4

5 に答える 5

4

これを行うには、次の 2 つの方法があります。

1)画面の向きの変更を気にせず、「サイズ変更」したいだけです。マニフェスト ファイルに次のプロパティを追加するだけです。

<activity
        android:name=".SplashScreen"
        android:configChanges="orientation|keyboardHidden|screenSize" ... />

アクティビティに次のコード行を追加します。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
            // do nothing, just override
}

2) 向きの変更を気にします。次に、向きの変更におけるアクティビティのライフサイクルについて知っておくべきことがいくつかあります。最初にが呼び出され、必要なものすべてを にonConfigurationChanged()格納する必要があります。Bundleたとえば、ユーザーが を編集したのでEditText、値を保存する必要があります。

なぜそれをするのですか?その後、onCreate()別のレイアウトを実装したり、s 内の何かを変更したりするために、メソッドが再度呼び出されるためですView。次に、以前に保存した変数を取得Bundleし、新しく作成したレイアウトで保存した変数を復元する必要があります。

于 2013-06-14T10:15:26.997 に答える
1

あなたができることがいくつかあります:

1) 画面の向きの変更を無視します。アプリが縦向きモード専用に設計されている場合、横向きモードでは見栄えがよくない可能性が高く、その逆も同様です。アクティビティでターゲットの向きを指定することをお勧めします。

2) 向きの変更を許可したい場合は、別の/変更されたレイアウトでビューを再作成するコードを記述しておく必要があります。私たちとコードを共有してもよろしいですか?

于 2013-06-14T09:45:49.453 に答える
1

android:configChanges="orientation"をアクティビティに追加するだけです

<activity android:name=".MyActivity"
        android:configChanges="orientation"/>

このように指定すると、画面の向きが変更されても oncreate は呼び出されません。これに関する詳細情報が必要な場合は、このリンクを確認してください

于 2013-06-14T09:35:14.577 に答える