2012-09-15 3 views
1

캘린더 응용 프로그램이 있습니다. 나는 ActionBarSherlock과 Tabs를 사용하고있다. 액션 바에 옵션 메뉴를 구현했습니다. 탭을 선택했을 때 액션 바에있는 하나의 메뉴 항목이 다르게 동작하도록합니다.클래스 외부 탭 위치 가져 오기

onOptionsItemSelected(MenuItem item) 메서드에서 탭 위치를 얻으려면 그에 따라 메뉴 항목을 적절하게 코딩 할 수 있습니까?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ActionBar bar = getSupportActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.Tab Tab1 = bar.newTab(); 
    ActionBar.Tab Tab2 = bar.newTab(); 

    Tab1.setText("Tab1"); 
    Tab2.setText("Tab2"); 

    Tab1.setTabListener(new MyTabListener()); 
    Tab2.setTabListener(new MyTabListener()); 

    bar.addTab(Tab1); 
    bar.addTab(Tab2); 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    Intent newActivity; 
    // Handle item selection 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      // app icon in action bar clicked; go home 
      newActivity = new Intent(this, Main.class); 
      newActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(newActivity); 
     return true; 
     case R.id.menu_today_date: 
        //if condition here based on tabs selected 
      CalendarFragment frag = new CalendarFragment(); 
      FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
      ft.replace(android.R.id.content, frag); 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
      ft.commit(); 

      return true; 
     case R.id.menu_prefs: 
      newActivity = new Intent(this, Settings.class); 
      startActivityForResult(newActivity, requestCode); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 


private class MyTabListener implements ActionBar.TabListener 
{ 
    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     if(tab.getPosition()==0) 
     { 
      CalendarFragment frag = new CalendarFragment(); 
      ft.replace(android.R.id.content, frag); 
     } 
     else 
     { 

      ConverterFragment frag = new ConverterFragment(); 
      ft.replace(android.R.id.content, frag); 
     } 
    } 
    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
    } 
    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
    } 
} 

답변

0

나는 탭 위치를 가져올 수 없습니다,하지만 난 그 일을 결국 방법이 있습니다 :

private int tabSelected = 0; 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    if(tab.getPosition()==0) 
    { 
     tabSelected = 0; 
     CalendarFragment frag = new CalendarFragment(); 
     ft.replace(android.R.id.content, frag); 
    } 
    else 
    { 
     tabSelected = 1; 
     ConverterFragment frag = new ConverterFragment(); 
     ft.replace(android.R.id.content, frag); 
    } 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    Intent newActivity; 
    // Handle item selection 
    switch (item.getItemId()) 
     case R.id.menu_today_date: 
      FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
      if (tabSelected == 0){ 
       CalendarFragment frag = new CalendarFragment(); 
       ft.replace(android.R.id.content, frag); 


      } 
      else { 
       ConverterFragment frag = new ConverterFragment(); 
       ft.replace(android.R.id.content, frag); 
      } 

      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
      ft.commit(); 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
}