2014-07-23 3 views
0

Tab Navigation을 사용하는 프로젝트에서 사용자 정의 Actionbar를 구현했습니다. 이 사용자 정의 액션 바는 제품 로고를 오른쪽에 표시하고 조각 탭 제목은 왼쪽에 dinamically 표시합니다. 그래서, 다른 단편으로 바꿀 때마다 탭을 선택할 때마다 액션 바의 제목도 바뀝니다.PagerTabStrip을 사용하여 ActionBar의 제목을 변경하십시오.

이 접근법은 정상적으로 작동하지만 지금은 PagerTabStrip을 구현하도록 수정했습니다. 이것을 얻으려면 PagerTabStrip에 대한 관련 코드를 포함하고 ActionBar의 탭 탐색을 사용하여 종료하십시오.

사실 나는 지금 행동 바의 제목을 dinamically 바꿀 수 없다는 것입니다.

은 지금 주요 활동에 PagerTabStrip으로 실행 바을 구현 한 방법입니다 :

MainActivity.java

/*Inflate your custom actionBar layout*/ 
final ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(R.layout.custom_actionbar, null); 

abTitle = (TextView) actionBarLayout.findViewById(R.id.abtitle); 

actionBar = getSupportActionBar(); 
/*Hide default icon*/ 
actionBar.setDisplayShowHomeEnabled(false); 
/*Hide default title*/ 
actionBar.setDisplayShowTitleEnabled(false); 
/*Enable custom view*/ 
actionBar.setDisplayShowCustomEnabled(true); 
actionBar.setCustomView(actionBarLayout); 

ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); 

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter { 

    final int PAGE_COUNT = 2; 
    /*Tab Titles*/ 
    private final String tabtitles[] = new String[] { "TEST", "SETTINGS"}; 
    Context context; 


    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 


    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       Fragment1 fragmenttab1 = new Fragment1(); 
       return fragmenttab1; 
      case 1: 
       Fragment2 fragmenttab2 = new Fragment2(); 
       return fragmenttab2; 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabtitles[position]; 
    } 
} 

을 그리고 이것은 내가 변경하는 방법입니다 탭을 사용할 때 Actionbar의 제목이 PagerTabStrip에서 작동하지 않는 것 같습니다. 조각에서

:

MainActivity에서
((MainActivity)getActivity()).setActionBarTitle(getString(R.string.test_title)); 

:

public void setActionBarTitle(String title) { 
    abTitle.setText(title); 
} 

그래서, 어떻게 PagerTabStrip를 사용 dinamically 실행 바의 제목을 변경하려면 어떻게해야합니까되는 것은? 이 방법이 왜 작동하지 않는가? PagerTabStrip은 다른 방법으로 조각을 관리합니까?

답변

1

당신은 당신이 각 시간이 새 페이지가 선택되어있는 액션 바의 제목을 설정해야합니다, 당신은

ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()) 
viewPager.setAdapter(adapter); 

또한 각각의 조각을 필요로 제목을 얻을 수 있도록 어댑터에 대한 참조를 유지해야 . 이처럼 ViewPager에 리스너를 추가

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 


        @Override 
        public void onPageScrollStateChanged(int state) { 

        } 

        @Override 
        public void onPageScrolled(int position, 
          float positionOffset, int positionOffsetPixels) { 
         } 

        @Override 
        public void onPageSelected(int position) { 
        //A new page has been selected. Change the title here 
        String title = adapter.getPageTitle(position); 
        (MainActivity)getActivity()).setActionBarTitle(title); 

        } 

     } 

onPageSelected 방법에 보라. 이것은 당신이 재정의하고 setTitle 호출을 배치하는데 필요한 콜백이다.

편집 :

@Override 
void onResume(){ 
    int pos = viewPager.getCurrentPosition(); 
    String title = adapter.getPageTitle(position); 
    setActionBarTitle(title); 
} 

당신은 참조를 설정해야합니다 : 이런 식으로 뭔가를 올바른 제목이 활동이 생성 될 때 설정/재/또는 배경에서 재개되도록 할하기 위해 onCreate() 호출 외의 ViewPager에 대해 알아 보겠습니다.)

+0

새 제안 된 방법으로 답변을 편집 할 수 있습니까? 현재 제안 된 방법을 구현할 때 몇 가지 어려움에 직면 해있다. – masmic

+0

완료. 결국 mViewPager.getCurrentItem() 메서드가 실제로 필요하지 않은 것처럼 보입니다. 그것을 확인하십시오 –

+0

알렉스, 단지 한가지, 내가 ViewPagerAdapter 클래스에 설정하고 있기 때문에 나는이 접근법에 어려움을 겪고 있다고 생각하지만 MainActivity에 놓아야합니까? – masmic

관련 문제