Action Bar Tabs = TAB A , TAB B , TAB C , TAB D 로 메인화면이 구성되어 있습니다.
여기서 TAB B Search Button Click - > New Fragment 가 보여집니다.
다시 New Fragment 에서 기기 Back Button Click - > TAB B 화면이 보여집니다. 여기까지는 잘 됩니다.
근데 New Fragment 가 보여진 상태에서 TAB 클릭시 앱이 종료됩니다.
Error : No view found for id 0x7f070053 (org.jsb.busgod.busgod:id/pager) for fragment BusStop{412d49c0 #7 id=0x7f070053 BusStop}
TabPager.class
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG,"TabViewPager onCreate Called.");
if(view == null) {
view = inflater.inflate(R.layout.tabpager,container,false);
mActionBar = ((ActionBarActivity) activity).getSupportActionBar();
mActionBar.setIcon(new ColorDrawable(Color.TRANSPARENT));
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mActionBar.setDisplayShowTitleEnabled(true);
mTabPagerAdapter = new ActionBarTabPagerAdapter(((ActionBarActivity) activity).getSupportFragmentManager());
mPager = (ViewPager) view.findViewById(R.id.pager);
mPager.setAdapter(mTabPagerAdapter);
mPager.setOnPageChangeListener(new PagerListener());
// 1
bmTab = mActionBar.newTab();
bmTab.setText("즐겨찾기");
bmTab.setTabListener(new TabListener<BookMark>(activity, "BookMark", BookMark.class));
mActionBar.addTab(bmTab);
//2
lnTab = mActionBar.newTab();
lnTab.setText("노선번호");
lnTab.setTabListener(new TabListener<LineNumber>(activity, "LineNumber", LineNumber.class));
mActionBar.addTab(lnTab);
//3
bsTab = mActionBar.newTab();
bsTab.setText("정류소");
bsTab.setTabListener(new TabListener<BusStop>(activity, "BusStop", BusStop.class));
mActionBar.addTab(bsTab);
//4
nbsTab = mActionBar.newTab();
nbsTab.setText("주변정류소");
nbsTab.setTabListener(new TabListener<NearbyBusStop>(activity, "NearbyBusStop", NearbyBusStop.class));
mActionBar.addTab(nbsTab);
} else {
((ViewGroup)view.getParent()).removeView(view);
}
if (savedInstanceState != null) {
mActionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
}
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tab", ((ActionBarActivity) activity).getSupportActionBar().getSelectedNavigationIndex());
}
//PagerListener
private class PagerListener extends ViewPager.SimpleOnPageChangeListener{
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
mActionBar.setSelectedNavigationItem(position);
}
}
//TabListener
private class TabListener <T> implements ActionBar.TabListener{
private Activity mActivity;
private String mTag;
private Class<T> mClass;
private Bundle mBundle;
private Fragment mFragment;
public TabListener(Activity mActivity, String mTag, Class<T> mClass){
this(mActivity,mTag,mClass,null);
}
public TabListener(Activity mActivity,String mTag, Class<T> mClass, Bundle mBundle){
super();
this.mActivity = mActivity;
this.mTag = mTag;
this.mClass = mClass;
this.mBundle = mBundle;
FragmentManager fm = ((ActionBarActivity)activity).getSupportFragmentManager();
mFragment = fm.findFragmentByTag(mTag);
if(mFragment != null && !mFragment.isDetached()){
FragmentTransaction ft = ((ActionBarActivity)activity).getSupportFragmentManager().beginTransaction();
ft.detach(mFragment);
ft.commit();
}
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
Log.d(TAG, "onTabSelected() Called.");
int position = tab.getPosition();
switch (position){
case 0:
mActionBar.setTitle("즐겨찾기");
break;
case 1:
mActionBar.setTitle("노선번호");
break;
case 2:
mActionBar.setTitle("정류소");
break;
case 3:
mActionBar.setTitle("주변정류소");
break;
}
if(mFragment == null){
mFragment = Fragment.instantiate(mActivity,mClass.getName(),mBundle);
fragmentTransaction.add(R.id.pager,mFragment,mTag);
}else{
fragmentTransaction.attach(mFragment);
}
mPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
Log.d(TAG,"onTabUnselected() Called.");
if(mFragment != null){
fragmentTransaction.detach(mFragment);
mFragment = null;
}
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
Log.d(TAG,"onTabReselected() Called.");
}
}