1

2 つのアクティビティAとがありBます。マニフェスト ファイルで for を縦向き、for を横向きscreenOrientationとしてA宣言しました。からまでBアクティビティを開始しています。Activity を開始して Activityを終了すると、私の画面が点滅します。私はそれを両方の活動に設定しました。ABABconfigChangesorientation

これはマニフェスト コード スニペットです。

<application
<activity android:name=".A"
            android:label="@string/app_name" android:theme="@style/MyTheme"
            android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden|adjustUnspecified"
            android:configChanges="orientation" />
<activity android:name=".B"
            android:label="@string/app_name" android:theme="@style/MyTheme"
            android:screenOrientation="landscape" android:windowSoftInputMode="stateAlwaysHidden|adjustUnspecified"
            android:configChanges="orientation" />

</application>

この問題を解決するアイデアはありますか???

前もって感謝します。

4

1 に答える 1

1

画面間でインテントを開始するときに、最初にPendingAnimationをオーバーライドしようとしましたか?多分いくつかのフェードか何か。

また、新しいアクティビティを開始するときに、setContentViewでビューが膨らむまで少し時間がかかるため、これがどのように問題になるかがわかります。そのため、そのステップが完了するまで画面が真っ暗になる可能性があります。traceviewを使用して、時間がかかる場所を確認し、onCreate->onDestroyメソッドを少し最適化することができます。

アクティビティの作成はコストのかかるプロセスです。これが本当に煩わしいと感じた場合は、ビューフリッパーを使用して、可能なすべてのコードを個別のビューに移動し、xmlからそれらを膨らませます(多分、それらが重すぎる場合は、onCreateで両方をロードし、おそらく多くのポートレートビューとランドスケープに対して宣言された変数。アクティビティに依存コードを残し、各ビューの固有の機能をビュークラスに移動します。

これはただの策略です。私はこれをカバーフローと画像サムを含むgridViewで実行しましたが、すばらしい結果になりました。ビューの切り替えは非常に高速で、主にデータがビュー間で共有されていたため、メモリ消費量が非常に少なくなりました。

編集

したがって、ビューを再起動またはretainConfigurationStateにするこのようなことをしたいとします(Androidドキュメントでは、方向の変更が少し速く処理されると書かれています)。アクティビティグループで方向の変更を処理するためのコードは次のとおりです。

2つのアクティビティAとBがあり、どのタイプでもかまいません(TAbActivityなど...)

そして私はOrientationChangeActivityと呼ばれる1つの主要な活動を持っています:

    public class OrientationChangeActivity extends ActivityGroup {
        private ArrayList<String> mIdList;

        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mIdList = new ArrayList<String>();
        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            startChildActivity("ActivityA", new Intent(this, ActivityA.class));
        } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            startChildActivity("ActivityB", new Intent(this, ActivityB.class));
        }
        }
............

これは私のコメントに投稿されたリンクを使用しています。アクティビティAを縦向きに設定し、アクティビティBを横向きに設定しています。OrientationChangeActivityを自動的に再起動させ(マニフェストにconfigChage宣言が含まれていない)、onCreateを再度呼び出してアクティビティを切り替えます。

コードを確認することもできます。

@Override
public void finishFromChild(Activity child) {
LocalActivityManager manager = getLocalActivityManager();
int index = mIdList.size() - 1;

if (index < 1) {
    finish();
    return;
}

manager.destroyActivity(mIdList.get(index), true);
mIdList.remove(index);
index--;
String lastId = mIdList.get(index);
Intent lastIntent = manager.getActivity(lastId).getIntent();
Window newWindow = manager.startActivity(lastId, lastIntent);
setContentView(newWindow.getDecorView());
}

これは、activityGroup内にアクティビティを作成し、それをビューに設定する方法を示しています。このコードを使用して、ここで作成時に両方のアクティビティをロードし、コンテンツビューとして方向の変更に従ってそれらを設定できます(つまり、configChage = directionを追加する必要があります)。

于 2011-07-14T15:09:40.080 に答える