2013-03-29 1 views
1

Sherlock 라이브러리를 사용하여 ActionBar를 사용하고 있습니다. 이 앱에서도 탭을 구현했습니다.Sherlock Library를 사용하여 ActionBar에 탐색 목록을 추가 할 때 탭이 Android에 표시되지 않습니까?

이제 ActionBar에서 NavigationList를 사용할 때 Tab 조각이 손실되었습니다. 액션 바에서 ListNavigation을 사용하기 위해 내가 사용하고 있습니다 :

mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

&을 내가 탭하지만 목록 mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);을 사용하던이 전.

지금, 나는 모두를 사용하려면, NavigationListTab Fragments

public class MainActivity extends SherlockFragmentActivity implements OnNavigationListener { 
    ActionBar mActionBar; 
    ViewPager mPager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     /** Getting a reference to action bar of this activity */ 
     mActionBar = getSupportActionBar(); 

     /** Set tab navigation mode */ 
     mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
     //mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(
       this, 
       R.array.locations, 
       android.R.layout.simple_spinner_item); 

     mActionBar.setListNavigationCallbacks(mSpinnerAdapter, this); 
     mActionBar.setIcon(R.drawable.app_icon); 

     /** Getting a reference to ViewPager from the layout */ 
     mPager = (ViewPager) findViewById(R.id.pager); 

     /** Getting a reference to FragmentManager */ 
     FragmentManager fm = getSupportFragmentManager();  

     /** Defining a listener for pageChange */ 
     ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){ 
      @Override 
      public void onPageSelected(int position) {    
       super.onPageSelected(position); 
       mActionBar.setSelectedNavigationItem(position);    
      } 

     }; 

     /** Setting the pageChange listner to the viewPager */ 
     mPager.setOnPageChangeListener(pageChangeListener); 

     /** Creating an instance of FragmentPagerAdapter */ 
     MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(fm); 

     /** Setting the FragmentPagerAdapter object to the viewPager object */ 
     mPager.setAdapter(fragmentPagerAdapter); 

     mActionBar.setDisplayShowTitleEnabled(true); 

     /** Defining tab listener */ 
     ActionBar.TabListener tabListener = new ActionBar.TabListener() { 

      @Override 
      public void onTabUnselected(Tab tab, FragmentTransaction ft) {    
      } 

      @Override 
      public void onTabSelected(Tab tab, FragmentTransaction ft) { 
       mPager.setCurrentItem(tab.getPosition()); 

      } 

      @Override 
      public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      } 
     }; 

     /** Creating Android Tab */ 
     Tab tab = mActionBar.newTab() 
       .setText("Android") 
       .setIcon(R.drawable.android) 
       .setTabListener(tabListener); 

     mActionBar.addTab(tab); 

     /** Creating Apple Tab */ 
     tab = mActionBar.newTab() 
       .setText("Apple") 
       .setIcon(R.drawable.apple) 
       .setTabListener(tabListener); 
     mActionBar.addTab(tab); 


    } 
} 

MyFragmentPagerAdapter.java

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ 

    final int PAGE_COUNT = 2; 

    /** Constructor of the class */ 
    public MyFragmentPagerAdapter(FragmentManager fm) { 
     super(fm); 

    } 

    /** This method will be invoked when a page is requested to create */ 
    @Override 
    public Fragment getItem(int arg0) { 
     Bundle data = new Bundle(); 
     switch(arg0){ 

      /** Android tab is selected */ 
      case 0: 
       AndroidFragment androidFragment = new AndroidFragment();     
       data.putInt("current_page", arg0+1); 
       androidFragment.setArguments(data); 
       return androidFragment; 

      /** Apple tab is selected */ 
      case 1: 
       AppleFragment appleFragment = new AppleFragment(); 
       data.putInt("current_page", arg0+1); 
       appleFragment.setArguments(data); 
       return appleFragment; 
     } 

     return null; 
    } 

    /** Returns the number of pages */ 
    @Override 
    public int getCount() {  
     return PAGE_COUNT; 
    } 

} 

그리고 다른 두 클래스 : 1) public class AppleFragment extends SherlockListFragment

2) public class AndroidFragment extends SherlockListFragment

ActionBar에 목록을 추가 할 때 내 탭을 잃어 버리는 이유를 제안 해주십시오.

답변

1

NAVIGATION_MODE_LISTNAVIGATION_MODE_TABS을 동시에 사용할 수 없습니다. 한 번에 탐색 모드 만 사용할 수 있습니다.

+0

귀하의 우려를 이해하지 못했습니다 ....이 설명해 주시겠습니까 –

+0

동시에 둘 다 사용할 수 없습니다. –

1

ActionBar의 목록 탐색 및 탭은 상호 배타적이며 하나만 사용할 수 있습니다.

목록과 탭을 모두 사용하려면 적어도 하나의 구현에 대해 다른 구현을 사용해야합니다. 탭의 경우 ViewPagerIndicator을 사용할 수 있습니다. ActionBar의 스피너는 여러 가지 방법으로 만들 수 있습니다

  • 사용하는 사용자 정의보기를 메뉴 항목

에 대한 메뉴 항목

  • 사용 ActionProvider의 회 전자
  • 사용 actionLayout 또는 actionViewClass을 만들 편집 :
    가장 쉬운 조정은대신 ViewPagerIndicator을 사용하는 것입니다.탭. 목록 탐색을 변경하려면 더 많은 작업이 필요합니다.
    ViewPagerIndicator 프로젝트의 웹 페이지는 살펴 봐야 할 몇 가지 예제 설치를 보여줍니다. 프로젝트의 GitHub page에는 라이브러리의 다양한 설정을 사용하는 방법을 보여주는 샘플이 많이 있습니다. 당신이 찾고있는 것이 TabPageIndicator이라면 this sample을보십시오 (탭의 제목은 FragmentPagerAdapter에 생성됩니다. 더 이상 ActionBar.TabActionBar.TabListener은 필요하지 않습니다).

  • +0

    몇 가지 예를 들어 주시겠습니까? 어떻게 맞춤 방식으로 구현할 수 있습니까? –

    +0

    IMHO에 대한 정보를 추가해야합니다. – Tomik

    관련 문제