2012-07-11 4 views
0

내가 성공적으로 여기 내 project.so에 actionsherlock 구현은 내 코드입니다 :처음에 actionbarsherlock에서 탭을 선택하지 않으셨습니까?

public class ActiontabActivity extends SherlockFragmentActivity { 


    ActionMode mMode; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTheme(R.style.Theme_Sherlock_Light_DarkActionBar); 
     setContentView(R.layout.main); 
     ActionBar bar = getSupportActionBar(); 
      bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
      bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

      bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); 

      bar.setDisplayShowHomeEnabled(false); 


      bar.setDisplayShowTitleEnabled(false); 
      bar.setTitle("Currency Exchange"); 
      bar.addTab(bar 
        .newTab() 
        .setText("Converter") 
        .setTabListener(
          new TabListener<Fragment>(this, "Converter", 
            ConverterTab.class, null))); 

      bar.addTab(bar 
        .newTab() 
        .setText("Favorites") 
        .setTabListener(
          new TabListener1<Fragment>(this, "Favorites", 
            FavoritesTab.class, null))); 
      if (savedInstanceState != null) { 
       bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); 
      } 


    } 


    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("tab", getSupportActionBar() 
       .getSelectedNavigationIndex()); 
    } 

    public class TabListener<T extends Fragment> implements ActionBar.TabListener { 
     private final FragmentActivity mActivity; 
     private final String mTag; 
     private final Class<ConverterTab> mClass; 
     private final Bundle mArgs; 
     private Fragment mFragment; 




     public TabListener(FragmentActivity activity, String tag, Class<ConverterTab> clz, Bundle args) { 
      mActivity = activity; 
      mTag = tag; 
      mClass = clz; 
      mArgs = args; 
      FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); 


      // Check to see if we already have a fragment for this tab, probably 
      // from a previously saved state. If so, deactivate it, because our 
      // initial state is that a tab isn't shown. 
      mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag); 
      if (mFragment != null && !mFragment.isDetached()) { 
       ft.detach(mFragment); 
      } 
     } 




     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      ft = mActivity.getSupportFragmentManager() 
         .beginTransaction(); 

       if (mFragment == null) { 
        mFragment = Fragment.instantiate(mActivity, mClass.getName(), 
          mArgs); 
        ft.add(android.R.id.content, mFragment, mTag); 
        ft.commit(); 
       } else { 
        ft.attach(mFragment); 
        ft.commit(); 
       } 


     } 




     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
       if (mFragment != null) { 
        //this segment removes the back history of everything in the tab you are leaving so when you click on the tab again you go back to a fresh start 
        FragmentManager man = mFragment.getFragmentManager(); 
        if(man.getBackStackEntryCount()>0) //this check is required to prevent null point exceptions when clicking off of a tab with no history 
         man.popBackStack(man.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE); //this pops the stack back to index 0 so you can then detach and then later attach your initial fragment 
        //also it should be noted that if you do popbackstackimmediate here instead of just popbackstack you will see a flash as the gui changes back to the first fragment when the code executes 
        //end 
        ft.detach(mFragment); 
       } 



     } 




     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 



    } 
    public class TabListener1<T extends Fragment> implements ActionBar.TabListener { 
     private final FragmentActivity mActivity; 
     private final String mTag; 
     private final Class<FavoritesTab> mClass; 
     private final Bundle mArgs; 
     private Fragment mFragment; 




     public TabListener1(FragmentActivity activity, String tag, Class<FavoritesTab> clz, Bundle args) { 
      mActivity = activity; 
      mTag = tag; 
      mClass = clz; 
      mArgs = args; 
      FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); 


      // Check to see if we already have a fragment for this tab, probably 
      // from a previously saved state. If so, deactivate it, because our 
      // initial state is that a tab isn't shown. 
      mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag); 
      if (mFragment != null && !mFragment.isDetached()) { 
       ft.detach(mFragment); 
      } 
     } 




     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      ft = mActivity.getSupportFragmentManager() 
         .beginTransaction(); 

       if (mFragment == null) { 
        mFragment = Fragment.instantiate(mActivity, mClass.getName(), 
          mArgs); 
        ft.add(android.R.id.content, mFragment, mTag); 
        ft.commit(); 
       } else { 
        ft.attach(mFragment); 
        ft.commit(); 
       } 


     } 




     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      if (mFragment != null) { 
        //this segment removes the back history of everything in the tab you are leaving so when you click on the tab again you go back to a fresh start 
        FragmentManager man = mFragment.getFragmentManager(); 
        if(man.getBackStackEntryCount()>0) //this check is required to prevent null point exceptions when clicking off of a tab with no history 
         man.popBackStack(man.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE); //this pops the stack back to index 0 so you can then detach and then later attach your initial fragment 
        //also it should be noted that if you do popbackstackimmediate here instead of just popbackstack you will see a flash as the gui changes back to the first fragment when the code executes 
        //end 
        ft.detach(mFragment); 
       } 


     } 




     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 



    } 
} 

그리고 나는 처음에 내 응용 프로그램의 실행시 지금 내가 원하는 tab.But 즐겨 찾기에 변환 탭에서 버튼 하나 하나 개 체크 박스를 넣어 어떤 탭도 선택하지 않았습니다. 메인 화면을 보여줍니다. 탭을 눌렀을 때 내용이 표시됩니다. 처음에는 탭이 선택되지 않은 상태에서 다른 내용을 표시하려고했기 때문에 어떻게해야합니까? 처음에는 메인 화면을 보여줄 수 있습니다. 그런 다음 탭을 선택하면 내용이 표시됩니다. 내 프로젝트의 이미지가 첨부되어 있습니다.

enter image description hereenter image description here

답변

2

당신은 다음과 같은 방법으로이 작업을 수행 할 수 있습니다 : 이것처럼

bar.addTab(yourTab,false); 

를 탭이 선택된 상태 시각적하지만 리스너에 onTabSelected 방법의 동작이 실행되지 않습니다.

0

안드로이드 탭을 만들 때 안드로이드는 탭을 선택으로 표시해야합니다. 하지만 몇 가지 아이디어가 있습니다.

첫 번째. 콘텐츠를 바꿀 수 있습니다. 부울 플래그를 만들고 탭을 선택하면 값이 변경됩니다. 따라서 플래그가 거짓 일 때 (예를 들어) 메인 화면에 대한 내용을 표시 할 수 있습니다.

또는 두 번째 아이디어. 메인 화면에 대한 탭과 콘텐츠로 또 다른 주요 활동을하십시오. 탭이 선택되면 실제 탭으로 활동을 실행하십시오.

죄송합니다. 뭔가 불분명 할 수 있습니다. 그래서 나에게 묻는다, 나는 그것을 더 분명히 설명하려고 노력할 것이다.

+0

예를 들어 코드를 작성할 수 있습니까? 저에게 도움이 될 것입니다. –

0

시도해주세요.
actionbar.addTab (converterTab, 0, false);
actionbar.addTab (favouriteTab, 1, false);

관련 문제