片段从屏幕上消失

时间:2015-10-24 18:33:12

标签: java android fragment orientation

我有活动,有两个片段。 FragmentSurahDetailFragmentTafsir。事件" OnOpenTafsir"时添加FragmentTafsir。如果添加FragmentTafsir并更改方向,则FragmentTafsir会从屏幕上消失。知道怎么解决吗?

这是我的代码:

public class ActivitySurahDetail extends AppCompatActivity implements FragmentSurahDetail.SurahListener {
    Toolbar toolbar;
    final String LOG_TAG = "ASD Tag";
    private static final String TAFSIR_FRAGMENT_TAG = "tafsir_fragment";
    private static final String SURAH_DETAIL_TAG = "surah_fragment";
    int surah_id;
    FragmentTafsir fragmentTafsir;
    private boolean favoriteMode;
    FragmentTransaction fragmentTransaction;
    FragmentSurahDetail fragmentSurahDetail;

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                super.onBackPressed();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.surah_detail_activity);
        Bundle extras = getIntent().getExtras();
        surah_id = extras.getInt("item_id");
        favoriteMode = extras.getBoolean("favoriteMode", false);
        fragmentSurahDetail = new FragmentSurahDetail();
        Bundle args = new Bundle();
        args.putBoolean("favoriteMode", true);
        args.putInt("item_id", surah_id);
        fragmentSurahDetail.setArguments(args);
        getSupportFragmentManager().beginTransaction().replace(R.id.surah_detail_container, fragmentSurahDetail, SURAH_DETAIL_TAG).commit();
        // Show the Up button in the action bar.
        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    }


    @Override
    public void onOpenTafsir(int surah, int ayah) {
        fragmentTafsir = new FragmentTafsir();
        fragmentTransaction = getSupportFragmentManager().beginTransaction();
        Bundle extras = new Bundle();
        extras.putInt("surah", surah);
        extras.putInt("ayah", ayah);
        fragmentTafsir.setArguments(extras);
        fragmentTransaction.addToBackStack(TAFSIR_FRAGMENT_TAG);
        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        fragmentTransaction.replace(R.id.surah_detail_container, fragmentTafsir, TAFSIR_FRAGMENT_TAG).commit();
    }
}

2 个答案:

答案 0 :(得分:0)

解决。我刚添加了一行

if (getSupportFragmentManager().findFragmentByTag(SURAH_DETAIL_TAG) == null){
            getSupportFragmentManager().beginTransaction().replace(R.id.surah_detail_container, fragmentSurahDetail, SURAH_DETAIL_TAG).commit();
        }

答案 1 :(得分:0)

在片段中使用setRetainInstance(true)。这是官方文件: http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)