【问题标题】:Menu in Action bar Android操作栏中的菜单 Android
【发布时间】:2013-04-16 04:40:18
【问题描述】:

我已经创建了带有一些动态选项卡的 ActionBar,如下面的代码。

public void addTabBar(Context context)
{       
    sActiveContext=context;      
    sActionBar = getActionBar(); 
    sActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}  

public void addTabItem(final String url, String tabTitle)
{   
    arrayList.add(url);
    Tab tab = sActionBar.newTab();
    if(tabTitle.equals(""))
    {
        int childcount=sActionBar.getTabCount();
        tabTitle="Tab" + String.valueOf(childcount+1);          
    }
    tab.setText(tabTitle);          
    tab.setTabListener(this);
    sActionBar.addTab(tab);        
}

  @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        linearLayout=new LinearLayout(sActiveContext);      
        linearLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
        linearLayout.setOrientation(LinearLayout.VERTICAL); 
        setContentView(linearLayout);
        CustomWebView webview=new CustomWebView(sActiveContext);
        FrameLayout layout=webview.createwebview();

        for (int i = 0; i < arrayList.size(); i++) {
            if(tab.getPosition()==i)
            {
                webview.initwebview(arrayList.get(i));
                break;
            }
        }
    linearLayout.addView(layout);
    }

如果我将此代码转换为库并调用这些方法,我可以在操作栏中创建 n 个选项卡。现在,我希望在下面的链接中添加菜单项和下拉菜单(带三个点的椭圆)。 http://developer.android.com/guide/topics/ui/actionbar.html#Tabs 如果我将图像传递给 showMenu(R.drawable.menu_image) 方法,则必须动态创建菜单项。我怎样才能做到这一点?请给点建议。

【问题讨论】:

  • showMenu(R.drawable.menu_image) ?
  • 是的,如果我在 onCreate() 中调用此方法,则必须动态创建操作栏中的菜单项。我怎样才能做到这一点?
  • 我接受了Sino的答案。

标签: android drop-down-menu menu android-actionbar


【解决方案1】:

试试这个, 在您的活动中,

private Menu menu=null;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
   this.menu=menu;
   //  call here as, showMenu(R.drawable.menu_image,2222);
   return true;
}
private void showMenu(int imageIcon,int id)//Where imageIcon is R.drawable.menu_image
{
   menu.add(0, id, 0, actionString).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);;
   MenuItem item=menu.findItem(id);
   item.setIcon(imageIcon);
}

【讨论】:

  • 先生。 Karthik,检查这个答案。
  • 我已经检查过了。但是菜单总是空的。我已经在 onCreate() 方法中调用了 shoMenu() 方法。
  • onCreate 上调用 showMenu() 时,菜单为空。因为 onCreateOptionsMenu(Menu menu) 是 onCreate 之后的调用。因此,您应该在菜单初始化后在 onCreateOptionsMenu(Menu menu) 中调用该函数。见上面的答案...
  • 现在执行成功了。还有什么方法可以调用showMenu()方法,在onCreateOptionsMenu()方法之外。
  • 您可以在任何地方调用,只有在 onCreateOptionsMenu() 执行后,如查看寻呼机事务、按钮单击等。
【解决方案2】:

尝试使用此方法处理所有活动菜单,并在选项卡更改时管理所有菜单以进行片段事务,

private Menu menu=null;

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
   this.menu=menu;
   //  call here as, showMenu(R.drawable.menu_image,2222);
   // add all menu's when that needed in your activity like save,cancel,choose color,  //close etc.
   menuHandler(0);
   return true;
}
private void showMenu(int imageIcon,int id)//Where imageIcon is R.drawable.menu_image
{
   menu.add(0, id, 0, actionString).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);;
   MenuItem item=menu.findItem(id);
   item.setIcon(imageIcon);
}
    private menuHandler(int position)
{
if(position==0)//For tab 1
{
if(!menu.findItem(1111).isVisible())    //check menu item with id 1111 is visible
    menu.findItem(1111).setVisible(true);
if(menu.findItem(2222).isVisible()) 
    menu.findItem(2222).setVisible(false);
}
else if(position==0)
{
if(menu.findItem(1111).isVisible()) 
    menu.findItem(1111).setVisible(false);
if(menu.findItem(2222).isVisible())
    menu.findItem(2222).setVisible(false);
}
else
{
if(menu.findItem(3333)
        menu.findItem(3333).setVisible(false);
if(!menu.findItem(2222).isVisible())
    menu.findItem(2222).setVisible(true);
}
}
@Override
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) 
    {}
    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) 
    {
menuHandler(tab.getPosition());
}

【讨论】:

  • 谢谢西诺。让我试试。你能给我关于这个stackoverflow.com/questions/16139259/…的建议吗?
  • 嗨,这工作正常。我正在将 webview 加载到选项卡中。如果我单击一个链接,该链接将转到第一个选项卡中的其他页面。我需要更新该特定页面中的菜单项。我怎样才能做到这一点?请帮帮我。
  • 有删除菜单项的选项吗?我怎样才能将图像从路径添加到菜单项图标,而不是像这样提供图像 R.id.save。?
  • 您只需从清单中删除 'android:targetSdkVersion=" " '