3

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

}

たとえば、CurrentItem が 4 のときにメニュー項目のアイコンを表示したい。

4

4 に答える 4

2

私は自分の質問に答えます:

@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);
    }
}
于 2015-02-05T21:12:30.893 に答える
1

OK..ViewPager.OnPageChangeListener で遊んで、ViewPagerのページを変更するたびにトリガーされるメソッド onPageSelected() を監視する必要があります。現在のページを追跡し、onPageSelected() が呼び出されるたびにActivityCompat.invalidateOptionsMenuへの呼び出しをディスパッチする必要があります。このinvalidateOptionsMenu()は、それを機能させるための鍵であり、オプション メニューの「更新」をトリガーする責任があります。間接的に onCreateOptionsMenu() メソッドが呼び出され、「非表示」または「非表示」にする機会があります。選択したタブに応じて異なるアイテムのセットを表示します。

例えば:

public boolean onCreateOptionsMenu(Menu menu) {
   ///

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


  return super.onCreateOptionsMenu(menu);
}
于 2015-02-05T11:14:14.797 に答える