根据ViewPager Android显示菜单项

Ele*_*na 3 android menu-items android-viewpager android-actionbar

我的Android应用中有一个带有片段的ViewPager.我想根据ViewPager的片段显示Action Bar菜单项.我已经对此提出了一些问题,但我找不到正确的解决方案.我的ViewPager代码是这样的:

    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);
            }
    }


    }
Run Code Online (Sandbox Code Playgroud)

我希望当CurrentItem为4时显示菜单项图标.

uuz*_*lac 7

首先在onCreate方法中创建addOnPageChangeListener

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) {

        }
    });
}
Run Code Online (Sandbox Code Playgroud)

然后你重写onCreateOptionMenu()

@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);
}
Run Code Online (Sandbox Code Playgroud)