Titanium 未加载菜单和 menuItem visible/not 可见

Titanium not load menu and menuItem visible/not visible

菜单有两个问题。 菜单由 .xml 文件创建。

示例:

<Menu>
<MenuItem id = "search" onclick = "search" />
<MenuItem id = "add" onclick = "add" />
</ Menu>

1) 第一个问题是有时奇怪的是菜单没有加载,也就是看不到按钮。 你能告诉我为什么吗。

2) 第二个问题是我有一个 menuItem 字段通常不可见,只有字段中的确定条件才必须可见。 你能告诉我如何访问该字段吗?

.xml

<MenuItem id = "profile" />

.tss

"#profile[platform=android]": {
      title: "Profile",
         icon: "/global/profile.png"
         showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
         visible: false
    }

.js

$ .profile.visible = True;

错误信息:无法设置未定义的属性可见。

我为我糟糕的英语道歉。

谢谢。

编辑:

示例:

         var activity = $ .index.activity;
         activity.onPrepareOptionsMenu = function (e) {
             var favoriteGroup e.menu.add = ({
                 title: "Profile",
                 icon: "/global/profile.png"
                 showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
             });
             favoriteGroup.addEventListener ('click', function () {
                Alloy.createController ("favorite_group", args) .getView (). Open ();
             });
         };
         activity.invalidateOptionsMenu ();

问题 1 的解决方案:

您将需要重新加载在 Alloy XML 中创建的菜单。大多数人在 window 的打开事件中在 .js 文件中创建菜单,以便只有在 window 正确打开后才能创建它们:

要在 .js 文件中创建菜单,请按以下步骤操作:

- 仅使用 window.js 的解决方案

    var searchMenu, addMenu;

    $.window.addEventListener('open', function () {
        var activity = $.window.activity;

        activity.onCreateOptionsMenu = function (e) {
            searchMenu = e.menu.add({
                title: 'Search',
                showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS
            });
            searchMenu.addEventListener('click', function () {
                 // open my profile here or do other tasks
            });

            addMenu = e.menu.add({
                title: 'Add',
                showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS
            });
        };

        // this is the code to validate menu items once they are added into an activity
        activity.invalidateOptionsMenu();
    });

- 使用 window.xml + window.js

的解决方案

所以,要解决你的问题没有。 1,您可能需要在 xml 的控制器文件中调用此代码(activity 仅在 window 打开后可用,因此请使用打开事件):

window.xml

<Menu platform="android">
    <MenuItem id="MENU_SEARCH" title="Search" onClick='search' showAsAction="Ti.Android.SHOW_AS_ACTION_ALWAYS" />
    <MenuItem id="MENU_ADD"   title="Add" onClick='add' showAsAction="Ti.Android.SHOW_AS_ACTION_ALWAYS" />
</Menu>

window.js

$.window.addEventListener('open', function () {
    $.window.activity.invalidateOptionsMenu();
});

问题 2 的解决方案:

可能有两个原因:

  • 你的 tss 没有像你在问题中写的那样正确。
  • 您甚至在 $.profile 菜单项打开之前就访问了它。 (参见解决方案 1 中的代码)。因此,在设置 属性.
  • 时,请在 window 打开事件中设置超时

window.js

$.window.addEventListener('open', function () {
    setTimeout(function () {
        $.profile.visible = true;
    }, 400);
});

.tss

"#profile[platform=android]": {
     title: "Profile",
     icon: "/global/profile.png",
     showAsAction: Ti.Android.SHOW_AS_ACTION_ALWAYS,
     visible: false
}