【问题标题】:Opening OptionsMenu on the touch of a tab of the TabActivity轻触 TabActivity 的选项卡即可打开 OptionsMenu
【发布时间】:2013-06-18 15:41:12
【问题描述】:

我有一个 tabActivity,我在运行时添加选项卡。所以我认为这是通常的代码:

_tabSpec = TabHost.newTabSpec("More");
_tabSpec.setIndicator("", Resources.GetDrawable(Resources.Drawable.myIcon).SetContent(intent);
TabHost.AddTab(_tabSpec);

现在问题是,我已经定义了一个选项菜单,我想在用户单击“更多”选项卡时将其弹出。我不知道该怎么做。我尝试不在该选项卡上设置内容,只是使用OpenOptionsMenu() 弹出它,但它似乎不起作用。

任何线索如何实现这一目标? P.S.:这是用 Xamarin 编写的 C# 代码。它可能看起来不像原生 java-android 代码,但几乎是一样的。

【问题讨论】:

    标签: android menu android-tabhost tabactivity android-optionsmenu


    【解决方案1】:

    好的,这是我想要做的事情的答案。

    Motive:向现有的 TabActivity 添加一个“更多”选项卡。当用户点击它时,打开某种 PopUpWindow 或 ContextMenu 等。

    执行此操作的步骤:

    1) 创建一个 tabSpec 并将该选项卡添加到 TabHost,如问题所示。 2) 现在您需要将最后添加的选项卡作为视图类型变量。这样做...

    View v = TabWidget.GetChildAt(index)
    

    记住标签的索引从 0 开始 3) 现在在您的主要活动(包含 TabActivity 的活动)的 onCreate() 方法上添加一个 onTouchListener()(我使用 C#,所以我添加了 v.Click+=myFunction())并编写 PopupWindow 或 ContextMenu 或任何您想要的代码在那里做。

    【讨论】:

      【解决方案2】:
      private String lastTab = null;
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              final TabHost tabHost = getTabHost();
      
              TabHost.TabSpec tabSpec;
      
              tabSpec = tabHost.newTabSpec("tab1");
              tabSpec.setIndicator("Tab 1");
              tabSpec.setContent(new Intent(this, OneActivity.class));
              tabHost.addTab(tabSpec);
      
              tabSpec = tabHost.newTabSpec("tab2");
              tabSpec.setIndicator("Tab 2");
              tabSpec.setContent(new Intent(this, TwoActivity.class));
              tabHost.addTab(tabSpec);
      
              tabSpec = tabHost.newTabSpec("more");
              tabSpec.setIndicator("More");
              tabSpec.setContent(new Intent(this, OneActivity.class));
              tabHost.addTab(tabSpec);
      
              tabHost.setOnTabChangedListener(new OnTabChangeListener() {
      
                  @Override
                  public void onTabChanged(String tabId) {
                      if (tabId.equalsIgnoreCase("more")){
                          openOptionsMenu();
                          tabHost.setCurrentTabByTag(lastTab);
                      }
                      else lastTab = tabId;
      
                  }
              });
      
      
          }
      

      【讨论】:

      • 所以你的意思是我应该只添加一个选项卡并设置任何意图,然后添加这个 onTabChangedListener?
      • 它不工作。我设置了一个空白活动,当用户单击最后一个选项卡时会显示该活动......菜单弹出很好,这不再是问题。但是,我不想向用户显示空白活动。我只是想要它像一个按钮。请帮忙。谢谢。
      • 如果用户选中“更多”,tabHost.setCurrentTabByTag(lastTab) 应该在最后一个活动标签上更改您的标签。你能通过调试器检查这个功能是如何工作的吗?
      • Dimmerg,onTabChanged 会触发每次更改标签的代码。您的解决方案无效。不过我没有尝试 serCurrentTabByTag。
      • 我已经更新了我的代码。我创建了测试项目,它运行良好 - 当我点击“更多”选项卡并将用户移动到最后一个选项卡时,它会打开选​​项菜单 - 作为用户,我没有看到选项卡发生变化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多