【问题标题】:Setting visibility of MenuItems issue设置 MenuItems 问题的可见性
【发布时间】:2014-02-02 07:19:01
【问题描述】:

我正在尝试为我的每个应用程序选项卡(操作栏导航选项卡)设置不同的 MenuItems。我尝试了很多解决方案,但最后一个似乎是最接近的。当我打开我的应用程序时,它隐藏了我的 MenuItem ,但是当我滑动到第二个片段时,它不显示 MenuItem 尽管我设置它必须是可见的。

你有什么想法,如何解决这个问题?

请参阅下面的代码(请主要检查注释“Here”附近的语句):

public class MainActivity extends ActionBarActivity{
    ProgressBar mProgressBar;
    EditText mEditText;
    RelativeLayout mRelativeLayout;
    ProgressBar oProgressBar;
    LinearLayout mLinearLayout;
    ViewPager mPager;
    ActionBar mActionBar;
    Menu mMenu;
    Tab mTab;

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

        Parse.initialize(this, "code", "code");

        ParseObject.registerSubclass(Animal.class);
        ParseAnalytics.trackAppOpened(getIntent());
        Log.v("Initialize", "intitalizing from Parse.com app");

        mActionBar = getSupportActionBar();
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mPager = (ViewPager) findViewById(R.id.pager);

        ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);

                mActionBar.setSelectedNavigationItem(position);
            }
        };

        FragmentManager fm = getSupportFragmentManager();
        mPager.setOnPageChangeListener(ViewPagerListener);

        ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);

        mPager.setAdapter(viewpageradapter);



        ActionBar.TabListener tabListener = new ActionBar.TabListener() {


            @Override
            public void onTabReselected(Tab mTab, FragmentTransaction arg1) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTabSelected(Tab mTab, FragmentTransaction arg1) {
                 mPager.setCurrentItem(mTab.getPosition());
                 mPager.setOffscreenPageLimit(3);
                 supportInvalidateOptionsMenu();  //Here


            }

            @Override
            public void onTabUnselected(Tab mTab, FragmentTransaction arg1) {
                // TODO Auto-generated method stub
                supportInvalidateOptionsMenu();
            }
        };



        ActionBar.Tab Animals = mActionBar.newTab().setText("Animals");
        ActionBar.Tab Frag2Tab = mActionBar.newTab().setText("Favorites");
        ActionBar.Tab Frag3Tab = mActionBar.newTab().setText("Settings");


        Animals.setTabListener(tabListener);
        Frag2Tab.setTabListener(tabListener);
        Frag3Tab.setTabListener(tabListener);


        mActionBar.addTab(Animals);
        mActionBar.addTab(Frag2Tab);
        mActionBar.addTab(Frag3Tab);

    }



    @Override
     public void onDestroy(){
         System.exit(0);
     }


    @Override
public boolean onPrepareOptionsMenu(Menu menu) {

    super.onPrepareOptionsMenu(menu);
        Fragment1 frg1 = new Fragment1();
        Fragment2 frg2 = new Fragment2();
        Fragment3 frg3 = new Fragment3();


        try {
            if(frg1.isMenuVisible()){


                    menu.findItem(R.id.action_refresh).setEnabled(false) .setTitle("").setIcon(null);
                    Log.v("fdsfad", "sadfasdfsa");

                            }
            else if (frg2.isMenuVisible()){


                    menu.findItem(R.id.action_refresh).setEnabled(true) .setTitle("Refresh").setIcon(R.drawable.ic_action_refresh);
                    Log.v("fdsfad", "sadfasdfsa");

                            }

            else if (frg3.isMenuVisible()){


                menu.findItem(R.id.action_refresh).setEnabled(true) .setTitle("Refresh").setIcon(R.drawable.ic_action_refresh);
                    Log.v("fdsfad", "sadfasdfsa");

                            }

    }   catch (Exception e) {
                    e.printStackTrace();
                                            }


        return true;

}
     @Override
        public boolean onCreateOptionsMenu(Menu menu) {


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

            return true;
        }




         public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_refresh:
                    Toast.makeText(getBaseContext(), "Pull to refresh", Toast.LENGTH_SHORT).show();

                    return true; 
                 } 
            return super.onOptionsItemSelected(item);
         }



         @Override
            public boolean onKeyDown (int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_SEARCH) {
                    Toast.makeText(this, "Search button: clicked", Toast.LENGTH_SHORT).show();
                }

                return super.onKeyDown(keyCode, event);
            }




         }

提前致谢!

【问题讨论】:

    标签: android android-actionbar android-viewpager android-optionsmenu menu-items


    【解决方案1】:

    如果没有可见的项目,setVisible(true) 将不起作用。

    一个选项是使图标为空,设置空标题并禁用此项目。或者,在 onPrepareOptionsMenu 中清除和扩展菜单可能会运行良好。

    【讨论】:

    • 感谢您的回答。我尝试了第一个解决方案,但它不起作用。我应该如何充气?
    • 对于第一个解决方案:代替行 menu.findItem(R.id.action_refresh).setVisible(false) 生成 menuItem.setEnable(false)menuItem.setTitle("")menuItem.setIcon(null)。如果您想显示项目,请执行相反的操作,例如 setEnable true、setIcon 与图像、setTitle 与您的标题值。
    • W8 暂时我会尝试制作示例应用
    • 它在我的项目中工作......也许frg2.isMenuVisible() 有问题?顺便说一句,每个onPrepareOptionsMenu 都制作新的Fragments 是非常不理想的。请尝试类似: public static boolean firstTrue = true; @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); if (firstTrue) { menu.findItem(R.id.action_refresh).setEnabled(false).setTitle("").setIcon(null); } else { menu.findItem(R.id.action_refresh).setEnabled(true).setTitle("Refresh"); } firstTrue = !firstTrue;返回真; }
    • 不要更改 TabListener 中的任何内容...我一直在谈论 onPrepareOptionsMenu 内部
    猜你喜欢
    • 2020-08-16
    • 2015-09-25
    • 1970-01-01
    • 2011-07-28
    • 2011-08-10
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多