package info.jiangpeng; import android.app.ActionBar; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import info.jiangpeng.fragment.BookListFragment; public class UserBookTabListener<T extends Fragment> implements ActionBar.TabListener { private final Activity activity; private BookListFragment bookListFragment; public UserBookTabListener(Activity activity, String tag, BookListFragment bookListFragment) { this.activity = activity; this.bookListFragment = bookListFragment; //if remove this method call, when device orientation change, it will attach again. detachFragmentIfAttached(activity, tag); } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { if (bookListFragment != null) { fragmentTransaction.attach(bookListFragment); // bookListFragment.executeSearchByReadingStatus(); System.out.println("------------attach " + tab.getTag().toString() + " to fragment"); } else{ System.out.println("------------Add " + tab.getTag().toString() + " to fragment"); bookListFragment = (BookListFragment) Fragment.instantiate(activity, BookListFragment.class.getName()); // bookListFragment.executeSearchByReadingStatus(); fragmentTransaction.add(android.R.id.content, bookListFragment, tab.getTag().toString()); } } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { if (bookListFragment != null) { fragmentTransaction.detach(bookListFragment); } } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { if (bookListFragment != null) { fragmentTransaction.attach(bookListFragment); } } private void detachFragmentIfAttached(Activity activity, String tag) { bookListFragment = (BookListFragment) activity.getFragmentManager().findFragmentByTag(tag); if (bookListFragment != null && !bookListFragment.isDetached()) { FragmentTransaction ft = activity.getFragmentManager().beginTransaction(); ft.detach(bookListFragment); ft.commit(); } } }