1

フラグメントを使用して典型的なタブレット アプリを開発しています。左側に要素のリスト、右側にコンテンツがあります。スマートフォン バージョンでは、要素のリストを含む 1 つのフラグメントのみを表示し、タブレットでは、リストとコンテンツを含む 2 つのフラグメントを表示します。

画面の回転を処理するために、アプリで回転を処理しています。ユーザーが画面を回転させ、右側に画像またはテキストを表示している場合、フルスクリーンで表示します。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.i(TAG, "onConfigurationChanged");
    if(MainFragmentActivity.isTablet)
    {   
        FragmentManager fm = getSupportFragmentManager();
        if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE && !frameTabs.isShown()) //Show again the tabs fragment
        {
            Utils.goNormalScreen(this);
            frameTabs.setVisibility(View.VISIBLE);
        }
        else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT && (fm.findFragmentByTag(Utils.SHOW_IMAGE_TAG) != null || fm.findFragmentByTag(Utils.SHOW_TEXT_TAG) != null 
                || fm.findFragmentByTag(Utils.SHOW_WEB_TAG) != null)) //Hide tabs fragment
        {
            Log.i(TAG, "Detected showing image");
            Utils.goFullScreen(this);
            frameTabs.setVisibility(View.GONE);
        }
    }
}

問題は 7 インチのタブレットです。ポートレート モードではスマートフォン バージョン (リスト付きの 1 つのフラグメント) を表示し、ランドスケープ モードでは 2 つのフラグメントを含むタブレット バージョンを表示します。

onConfigurationChanged() で 7 インチ タブレットを検出し、レイアウトを変更するためにアクティビティを再作成する必要がありますね。どうやってするか?それを機能させるための他の良い方法はありますか?

サーバー (ListView) からすべてのデータを再度取得するアクティビティを再作成する必要がありますか?それとも、データをバンドルに保存してローテーション時に再利用する方がよいでしょうか?

4

1 に答える 1

3

まず、構成変更の処理を停止してから、2 つのフラグメント レイアウトを配置しlayout-sw600dp-land、残りはそのままにしておきます。Android は、回転時にそのレイアウトを自動的に使用することを決定します。

于 2013-03-22T16:09:02.523 に答える