Android FragmentActivity / FragmentPagerAdapter и actionBar обновляют на CreateOptionsMenu - PullRequest
0 голосов
/ 17 марта 2012

У меня есть действие, которое использует фрагмент pageradapter для создания actionBar в стиле ics. Каждая страница должна обновлять actionBar. Есть ли способ, которым я могу позвонить onCreateOptionsMenu в моем onPageSelected?

Для простоты я вырезал большую часть кода из приведенного ниже примера.

public class ListFragmentViewPagerActivity extends FragmentActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.thread_view);

        ViewPager pager = (ViewPager) findViewById(android.R.id.list);
        pager.setAdapter(new ExamplePagerAdapter(getSupportFragmentManager()));
        TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicator);
        indicator.setViewPager(pager);
        indicator.setOnPageChangeListener(new OnPageChangeListener() {
             @Override
             public void onPageSelected(int position) {

                 }

            @Override
            public void onPageScrollStateChanged(int arg0) {                
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {                
            }
        });
    }

    public class ExamplePagerAdapter extends FragmentPagerAdapter implements TitleProvider{

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

        @Override
        public int getCount() {
            return URLS.size();
        }

        @Override
        public Fragment getItem(int position) {
            Fragment fragment = new ThreadFragment();

            // set arguments here, if required
            Bundle args = new Bundle();
            fragment.setArguments(args);

            return fragment;
        }

        @Override
        public String getTitle(int pos) {
            return TITLES.get(pos);
        }

    }

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuinflate = new MenuInflater(this);
        menuinflate.inflate(R.menu.thread_menu, menu);
        if (type.equals("xda")) {
            menu.removeItem(R.id.ss_view);
        }

            //This worked when I only needed to call it one time. I need to update this menu for each page in my viewPager though.
        if (isFav) {
            menu.getItem(2).setIcon(R.drawable.fav_ab);
        }
        return true;        
    }   

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case android.R.id.home:
                Intent intent = new Intent(this, MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            break;
            case R.id.ss_view:
                Intent ssi = new Intent(this, SSActivity.class);
                ssi.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                Bundle b = new Bundle();
                ssi.putExtras(b);
                startActivity(ssi);
            break;
            case R.id.restart:
            break;
            case R.id.fav_ab:
                break;
            default:
                return super.onOptionsItemSelected(item);
        }
        return false;
    }    
}

UPDATE Вызов invalidateOptionsMenu () в моем onPageSelected () добился цели!

1 Ответ

2 голосов
/ 17 марта 2012

Используйте invalidateOptionsMenu(), но убедитесь, что вы завернули это в trycatch, если вы поддерживаете что-либо ниже 3.0, так как этот метод не существует и завершится сбоем!

Если вы хотите обновить свое меню на устройствах до 3.0, переопределите также onPrepareOptionsMenu(), который будет вызываться при каждом открытии меню.

...