import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private static final String TAG = "MainActivity";
private ActionBar mActionBar;
private TextView title;
private ActionBarTabPagerAdapter mTabPagerAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mActionBar = getSupportActionBar();
mActionBar.setIcon(new ColorDrawable(Color.TRANSPARENT));
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mActionBar.setDisplayShowTitleEnabled(true);
//ViewPager
mTabPagerAdapter = new ActionBarTabPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.main);
mViewPager.setAdapter(mTabPagerAdapter);
mViewPager.setOnPageChangeListener(new PagerListener());
// 1
ActionBar.Tab bmTab = mActionBar.newTab();
bmTab.setText("즐겨찾기");
bmTab.setTabListener(new TabListener<BookMark>(MainActivity.this,"BookMark",BookMark.class));
mActionBar.addTab(bmTab);
//2
ActionBar.Tab lnTab = mActionBar.newTab();
lnTab.setText("노선번호");
lnTab.setTabListener(new TabListener<LineNumber>(MainActivity.this,"LineNumber",LineNumber.class));
mActionBar.addTab(lnTab);
//3
ActionBar.Tab bsTab = mActionBar.newTab();
bsTab.setText("정류소");
bsTab.setTabListener(new TabListener<BusStop>(MainActivity.this,"BusStop",BusStop.class));
mActionBar.addTab(bsTab);
//4
ActionBar.Tab nbsTab = mActionBar.newTab();
nbsTab.setText("주변정류소");
nbsTab.setTabListener(new TabListener<NearbyBusStop>(MainActivity.this,"NearbyBusStop",NearbyBusStop.class));
mActionBar.addTab(nbsTab);
if(savedInstanceState != null){
mActionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab",0));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tab",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 = getSupportFragmentManager();
mFragment = fm.findFragmentByTag(mTag);
if(mFragment != null && !mFragment.isDetached()){
FragmentTransaction ft = 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.main,mFragment,mTag);
}else{
fragmentTransaction.attach(mFragment);
}
mViewPager.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.");
Toast.makeText(mActivity, "ReSelected!!!", Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()){
case R.id.action_settings:
Toast.makeText(MainActivity.this,"설정이 눌렸습니다.",Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
코드는 이렇게 되어 있습니다. 질문은 viewpager 방식으로 화면을 이동 하면 tabListener 의 onTabSelected() 가 호출됩니다.
그리고 Tab 방식으로 화면을 이동할때는 onTabReselected() 가 호출됩니다. 즉, Tab 방식으로 화면을 이동할때 onTabUnselected()
-> onTabSelected() -> onTabReselected() 가 동시에 이루어집니다. 여기서 해결하고싶은 문제는 Tab방식으로 이동할때 onTabReselected()가 호출이 안되게끔 하고 싶습니다. 부탁드리겠습니다. ㅠ_ㅠ