/* $Id: $ */ package com.oreilly.demo.android.pa.contactviewer; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; /** * ContactViewer */ public class ContactViewer extends FragmentActivity { private static final String FRAG_TAG = ContactViewer.class.getCanonicalName() + ".fragment"; private boolean useFrag; /** @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle) */ @Override public void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.main); useFrag = null != findViewById(R.id.contact_detail); if (useFrag) { installDetailsFragment(); } } /** * @see android.support.v4.app.FragmentActivity#startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int) */ @Override public void startActivityFromFragment( Fragment fragment, Intent intent, int requestCode) { if (!useFrag) { startActivity(intent); } else if (fragment instanceof ContactsFragment) { launchDetailFragment(intent.getExtras()); } } private void installDetailsFragment() { FragmentManager fragMgr = getSupportFragmentManager(); if (null != fragMgr.findFragmentByTag(FRAG_TAG)) { return; } FragmentTransaction xact = fragMgr.beginTransaction(); xact.add( R.id.contact_detail, ContactDetailFragment.newInstance(), FRAG_TAG); xact.commit(); } private void launchDetailFragment(Bundle xtra) { FragmentTransaction xact = getSupportFragmentManager().beginTransaction(); xact.replace( R.id.contact_detail, ContactDetailFragment.newInstance(xtra), FRAG_TAG); xact.addToBackStack(null); xact.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); xact.commit(); } }