package com.example.activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.view.View; import com.example.R; import com.example.fragment.SimpleFragment; import com.example.listener.OnDualPaneShowListener; public class ListingActivity extends AppCompatActivity implements OnDualPaneShowListener { private static final String SAVED_DUAL_PANE_FRAGMENT = "dual_pane_fragment"; private static final String SAVED_DUAL_PANE_INDEX = "dual_pane_index"; private boolean mDualPane; private Class<?> mDualPaneFragment = null; private int mDualPaneIndex = -1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listing); // restore saved state if(savedInstanceState != null) { handleSavedInstanceState(savedInstanceState); } // handle dual pane layout handleDualPane(); } @Override public void onSaveInstanceState(Bundle outState) { // save current instance state super.onSaveInstanceState(outState); if(mDualPaneFragment != null) outState.putString(SAVED_DUAL_PANE_FRAGMENT, mDualPaneFragment.getName()); if(mDualPaneIndex != -1) outState.putInt(SAVED_DUAL_PANE_INDEX, mDualPaneIndex); } @Override public void onDualPaneShow(Class<?> targetFragment, int index) { mDualPaneFragment = targetFragment; mDualPaneIndex = index; if(mDualPane) { Fragment fragment = null; String tag = null; // type of fragment to be replaced if(targetFragment.equals(SimpleFragment.class)) { fragment = SimpleFragment.newInstance(index); tag = SimpleFragment.class.getSimpleName(); } // replace fragment if(fragment != null) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.container_dual_pane, fragment, tag); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); transaction.commit(); } } else { Intent intent = null; // type of activity to be started if(targetFragment.equals(SimpleFragment.class)) { intent = SimpleActivity.newIntent(this, index); } // start activity if(intent != null) { startActivity(intent); } } } private void handleSavedInstanceState(Bundle savedInstanceState) { String dualPaneFragmentString = savedInstanceState.getString(SAVED_DUAL_PANE_FRAGMENT); try { if(dualPaneFragmentString != null) mDualPaneFragment = Class.forName(dualPaneFragmentString); } catch(ClassNotFoundException e) { e.printStackTrace(); } mDualPaneIndex = savedInstanceState.getInt(SAVED_DUAL_PANE_INDEX, -1); } private void handleDualPane() { // activity has dual pane layout View dualPaneContainer = findViewById(R.id.container_dual_pane); mDualPane = dualPaneContainer != null && dualPaneContainer.getVisibility() == View.VISIBLE; if(mDualPane && mDualPaneFragment != null && mDualPaneIndex != -1) { onDualPaneShow(mDualPaneFragment, mDualPaneIndex); } } }