0

横向きでは、previewFragmentがR.id.fragment_container_child(画面の左3分の1)にロードされ、selectionFragmentがR.id.fragment_container_parent(画面の右3分の2)にロードされたアクティビティがあります。2番目のタブを選択すると、selectionFragmentがcontactFragmentに変更されますが、previewFragmentは同じままです。これはすべて正常に機能します。

向きを変更すると、レイアウトはxmlを介してわずかに変更されます。ここで、R.id.fragment_childは、左3分の1ではなく下3分の1を占めます。向きを変えると問題が発生します。レイアウトの変更が確認されましたが、アクションバーとフラグメントが消えます。マニフェストファイルで

定義していません。android:configChanges="orientation"以下は私の活動のコードです:

public class MainActivity extends Activity implements ActionBar.TabListener {

static SelectionFragment selectionFragment;
static ContactFragment contactFragment;
public static PreviewFragment previewFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (findViewById(R.id.fragment_container_child) != null) {
        if (savedInstanceState != null) {
            return;
        }
        previewFragment = new PreviewFragment();
        selectionFragment = new SelectionFragment();
        FragmentTransaction transaction = getFragmentManager()
                .beginTransaction();
        transaction.add(R.id.fragment_container_child, previewFragment,
                "PREVIEW");
        transaction.add(R.id.fragment_container_parent, selectionFragment,
                "SELECTION");
        transaction.commit();
    }
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.addTab(actionBar.newTab().setText(R.string.menu)
            .setTabListener(this));
    actionBar.addTab(actionBar.newTab()
            .setText(R.string.client_information).setTabListener(this));
    sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
}

@Override
public void onSaveInstanceState(Bundle outState) {
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction transaction) {
    switch (tab.getPosition()) {
    case 0:
        if (selectionFragment == null) {
            selectionFragment = new SelectionFragment();
            transaction.add(R.id.fragment_container_parent,
                    selectionFragment, "SELECTION");
        } else {
            transaction.attach(selectionFragment);
        }
        break;
    case 1:
        if (contactFragment == null) {
            contactFragment = new ContactFragment();
            transaction.add(R.id.fragment_container_parent,
                    contactFragment, "CONTACT");
        } else {
            transaction.attach(contactFragment);
        }
        break;
    }

}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
    switch (tab.getPosition()) {
    case 0:
        if (selectionFragment != null)
            transaction.detach(selectionFragment);
        break;
    case 1:
        if (contactFragment != null)
            transaction.detach(contactFragment);
        break;
    }
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction transaction) {

}
4

1 に答える 1

1

あなたに実際に何が起こっているのか理解できませんが、ここにいくつかのヒントがあります。

  • 画面を回転させると、Android はすべての Fragment/Activity を破棄して再構築します。だからあなたのonCreate、onDestroyを見てください...

  • 複数画面のアプリが必要な場合は、こちらをご覧になり、各画面に新しいレイアウトを作成して、アプリが正常に動作することを確認してください。

于 2013-01-01T02:06:14.800 に答える