6

同じアクティビティで表示される 2 つの異なるフラグメントを持つテストプロジェクトを作成しました。1 つのフラグメントは横長用で、もう 1 つは縦長用です。

# My unique activity
public class MainActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

# First Fragment
public class LandscapeFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
        v.setText("LANDSCAPE");
        return v;
    }
}

# Other Fragment
public class PortraitFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
        v.setText("PORTRAIT");
        return v;
    }
}

そして、2 つの main.xml があり、1 つは layout/ に、もう 1 つは layout-land/ にあります。各 main.xml は、使用する正しい Fragment を指します。

<!-- layout-land/main.xml  -->
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment"
    android:name="br.luckcheese.test.LandscapeFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp" />

<!-- layout/main.xml  -->
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment"
    android:name="br.luckcheese.test.PortraitFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp" />

<!-- layout/fragment.xml  -->
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="30sp" />

アプリをランドスケープで開くと LandscapeFragment が表示され、ポートレートで開くと PortraitFragment が表示されます。ここまでは順調ですね。

しかし、横向きで開いてデバイスを縦向きに回転すると、LandscapeFragment がリロードされて表示されます。これは予測された動作ではありません。PortraitFragment がロードされているはずです。

デバイスが縦向きで開始し、次に横向きに回転すると、同じことが逆に起こります。LandscapeFragment が読み込まれる代わりに、PortraitFragment がリロードされるだけです。

私は何を間違っていますか?

4

2 に答える 2

2

次がないことを確認してくださいandroid:config="orientation":

于 2012-04-06T15:21:00.117 に答える
1

問題は 2 つのレイアウトにあります。フラグメント ID は同じです。次のように、これらのフラグメント ID を変更するだけです。

layout/main.xml の fragmentportrait

layout-land/main.xml の fragmentlanscape。(また変更: Fragment frag = getSupportFragmentManager().findFragmentById(R.id.fragment);

frag.setRetainInstance(false); )

于 2012-04-11T07:37:40.467 に答える