Android 菜单项未检测到用户';单击“操作\完成”按钮

Android 菜单项未检测到用户';单击“操作\完成”按钮,android,android-studio,menuitem,Android,Android Studio,Menuitem,我有一个ScreenSlideActivity.java和一个寻呼机滑动片段。因为我想用屏幕幻灯片动画创建一个教程,所以我想在用户按下“完成”按钮时将其导航回主要活动。 我的问题是OnOptions ItemSelected中的菜单项没有检测到用户对“finish”按钮的压力。这是我的代码: 在OnCreateOptions菜单中,我添加了三个按钮:“上一个”、“下一个”和“完成”,并根据当前选择的页面向操作栏添加“下一个”或“完成”按钮 @Override public boolean onC

我有一个ScreenSlideActivity.java和一个寻呼机滑动片段。因为我想用屏幕幻灯片动画创建一个教程,所以我想在用户按下“完成”按钮时将其导航回主要活动。 我的问题是OnOptions ItemSelected中的菜单项没有检测到用户对“finish”按钮的压力。这是我的代码:

在OnCreateOptions菜单中,我添加了三个按钮:“上一个”、“下一个”和“完成”,并根据当前选择的页面向操作栏添加“下一个”或“完成”按钮

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.activity_screen_slide, menu);

    menu.findItem(R.id.action_previous).setEnabled(mPager.getCurrentItem() > 0);

    // Add either a "next" or "finish" button to the action bar, depending on which page
    // is currently selected.
    MenuItem item = menu.add(
            Menu.NONE,
            R.id.action_next,
            Menu.NONE,
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1) 
                            ? R.string.action_finish : R.string.action_next);
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return true;
}
然后在OnOptions ItemSelected中,我处理与三个按钮的交互

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:

            // Navigate "up" the demo structure to the launchpad activity.
            // See http://developer.android.com/design/patterns/navigation.html for more.
            NavUtils.navigateUpTo(this, new Intent(this, MainActivity.class));
            return true;

        case R.id.action_previous:
            // Go to the previous step in the wizard. If there is no previous step,
            // setCurrentItem will do nothing.
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
            return true;

        case R.id.action_next:
            // Advance to the next step in the wizard. If there is no next step, setCurrentItem
            // will do nothing.
            mPager.setCurrentItem(mPager.getCurrentItem() + 1);
            return true;

        case R.id.action_finish:
            NavUtils.navigateUpTo(this, new Intent(this, MainActivity.class));
            return true;
    }

    return super.onOptionsItemSelected(item);
}
“previous”按钮是在“activity\u screen\u slide.xml”中创建的:

多谢各位

来自:

菜单对象
itemId
的add()方法中的第二个参数提到:

唯一项目ID。如果不需要唯一ID,请使用“无”。

您分配给按钮的ID是
R.ID.action\u next
。您确实有一个条件,但最后一个参数
titleRes
是标题字符串的
资源标识符。因此,当您应该更改
add()
方法的第二个参数(即项目ID)时,您只能更改插入到菜单中的菜单项的标题


结论:
菜单的第二个参数上必须有另一个条件赋值。add()
方法的操作方式与第四个参数相同。

答案很好,它是这样工作的:

    MenuItem item = menu.add(
            Menu.NONE,   
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)
                    ? R.id.action_finish : R.id.action_next, 
            Menu.NONE,   
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)  
            ? R.string.action_finish : R.string.action_next);  
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return true;
}

您提到的
选项menuselected中的菜单项没有检测到…
。我似乎找不到那种方法。也许你的意思是“选项项选定”
?哦,糟糕,你完全正确。我刚刚改正了;)
<resources>
<!--
    These action bar item IDs (menu item IDs) are defined here for
    programmatic use. Normally, IDs are created using the "@+id/foo"
    syntax,
    but since these IDs aren't created in menu XML, rather
    used for programmatically-instantiated action bar items, they
    are defined here.
-->
<item type="id" name="action_flip" />
<item type="id" name="action_next" />
<item type="id" name="action_finish" />
    MenuItem item = menu.add(
            Menu.NONE,   
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)
                    ? R.id.action_finish : R.id.action_next, 
            Menu.NONE,   
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)  
            ? R.string.action_finish : R.string.action_next);  
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return true;
}
    MenuItem item = menu.add(
            Menu.NONE,   
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)
                    ? R.id.action_finish : R.id.action_next, 
            Menu.NONE,   
            (mPager.getCurrentItem() == mPagerAdapter.getCount() - 1)  
            ? R.string.action_finish : R.string.action_next);  
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return true;
}