2015-02-05 8 views
3

Android 앱에 조각이있는 ViewPager가 있습니다. ViewPager의 조각에 따라 Action Bar 메뉴 항목을 표시하고 싶습니다. 이것에 대한 몇 가지 질문을 읽었지만 올바른 해결책을 찾을 수 없습니다. 내 ViewPager의 코드는 다음과 같습니다.ViewPager에 따라 메뉴 항목 표시 Android

public class My_Activity extends ActionBarActivity { 

     private ViewPager mViewPager; 
     String idioma; 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.my_main); 


      ActionBar actionBar = getSupportActionBar(); // || getActionBar(); 
      actionBar.setIcon(getResources().getDrawable(R.drawable.navbar_logo)); 
      actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#CC3333"))); 

      actionBar.setTitle("Hello"); 



      mViewPager = (ViewPager) findViewById(R.id.viewpager); 
      PagerTabStrip pagerTabStrip = (PagerTabStrip) findViewById(R.id.pagerTabStrip); 
      pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.blanco)); 


      Title_Liga_Adapter titleAdapter = new Title_Liga_Adapter(getSupportFragmentManager()); 
      mViewPager.setAdapter(titleAdapter); 

      mViewPager.setCurrentItem(0); 

      getSupportActionBar().setIcon(R.drawable.navbar_logo); 

      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 


      } 


    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
if (mViewPager.getCurrentItem()==4){ 
    getMenuInflater().inflate(R.menu.menu_comunidad, menu); 
} 
else{ 

} 
     return true; 
} 


/* * 
* Called when invalidateOptionsMenu() is triggered 
*/ 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    menu.findItem(R.id.action_search).setVisible(true); 


    return super.onPrepareOptionsMenu(menu); 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      this.finish(); 
      return true; 

     case R.id.action_search: 

      return true; 

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


    } 

예를 들어 CurrentItem이 4 인 경우에는 메뉴 항목 아이콘을 표시합니다.

+0

당신은 OnPageChangeListener http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html 구현할 수 있습니다 당신은 당신이 onPageSelected에하고 싶은 이제까지 무엇을 할 수 기능. –

+0

onPageChangeListener를 사용하여 코드를 업데이트했지만이 내부에서 메뉴를 만드는 방법은 무엇입니까? invalidateOptionMenu 기능 onCreateOptionMenu는이 MenuInflater 인플레이터 = getMenuInflater()와 같은 눈에 보이는 페이지에 따라 메뉴를 부풀려 수 있습니다 여기에 호출됩니다 호출하여 invalidateOptionMenu 기능 onCreateOptionMenu 당신이 볼 수 페이지 – Elena

+0

; inflater.inflate (메뉴 menu, menu); –

답변

1

좋습니다. 당신은 당신이 ViewPager의 페이지를 바꿀 때마다 트리거 될 onPageSelected() 메소드를 모니터 할 ViewPager.OnPageChangeListener으로 놀아야 할 것입니다. onPageSelected()가 호출 될 때마다 현재 페이지가 무엇인지 추적하고 ActivityCompat.invalidateOptionsMenu에 전화를 발신해야합니다. 이 invalidateOptionsMenu()이 작동하게하는 열쇠입니다. 옵션 메뉴의 '새로 고침'을 트리거하는 책임이 있습니다. 간접적으로 onCreateOptionsMenu() 메소드가 호출되고 '숨기기'할 수 있습니다. 또는 선택한 탭에 따라 다른 항목 세트를 '표시'하십시오. 예를 들어

:

@Override 
     public boolean onCreateOptionsMenu(Menu menu) { 

      getMenuInflater().inflate(R.menu.menu_comunidad, menu); 

       return true; 
     } 


     /* * 
     * Called when invalidateOptionsMenu() is triggered 
     */ 
     @Override 
     public boolean onPrepareOptionsMenu(Menu menu) { 
      if (mViewPager.getCurrentItem()==4){ 
      menu.findItem(R.id.action_search).setVisible(true); 
      } 
      else{ 
       menu.findItem(R.id.action_search).setVisible(false); 
      } 
      return super.onPrepareOptionsMenu(menu); 
     } 

     public boolean onOptionsItemSelected(MenuItem item) { 
       switch (item.getItemId()) { 
       // Respond to the action bar's Up/Home button 
       case android.R.id.home: 
        this.finish(); 
        return true; 

       case R.id.action_search: 

        return true; 

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

onPageChangeListener를 사용하여 코드를 업데이트 한 적이 있지만이 내부에서 메뉴를 만드는 방법은 무엇입니까? 감사합니다 – Elena

+0

당신은 메뉴를 생성하는 onCreateOptionsMenu() 메소드를 생성해야합니다. onPageSelected()를 호출하면됩니다. invalidateOptionsMenu(); 논리의 나머지 부분은 내 예제에서 작성한 onCreateOptionsMenu()로 이동합니다. –

1

나는 내 자신의 질문에 대답 ateOptionMenu()

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    if (mViewPager.getCurrentItem()==0){ 
     menu.findItem(R.id.action_search).setVisible(true); 
    } else if(mViewPager.getCurrentItem()==1){ 
     menu.findItem(R.id.action_search).setVisible(false); 
    } else if(mViewPager.getCurrentItem()==2){ 
     // configure 
    } else if(mViewPager.getCurrentItem()==3){ 
     // configure 
    } 
    return super.onCreateOptionsMenu(menu); 
} 
6

먼저 당신이 onCre를 오버라이드 (override)

ViewPager mViewPager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
      // ... 

    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      invalidateOptionsMenu(); 
     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 
} 

방법에서 onCreateaddOnPageChangeListener를 만듭니다

public boolean onCreateOptionsMenu(Menu menu) { 
    /// 

    if (currentPageIdx == 4) { 
     // inflate menu for page 4 
     // configure the menus 
    } .... 


    return super.onCreateOptionsMenu(menu); 
}