我有一个带有寻呼机的ScreenSlideActivity.java滑动片段。由于我想使用屏幕幻灯片动画创建一个教程,我想在用户按下"完成"时将用户导航回主要活动。按钮。 我的问题是onOptionsItemSelected内的菜单项没有检测到用户对"完成"的压力。按钮。这是我的代码:
在onCreateOptionsMenu中,我添加了三个按钮:"上一个","下一个"和"完成",并添加" next"或者"完成"按钮到操作栏,具体取决于当前选择的页面。
@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;
}
然后在onOptionsItemSelected中我处理与三个按钮的交互
@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);
}
"之前"按钮在" activity_screen_slide.xml"中创建:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Adds an item to the list. -->
<item android:id="@+id/action_previous"
android:title="@string/action_previous"
android:showAsAction="ifRoom|withText" />
</menu>
而其他两个只是在&#34; ids.xml&#34;中创建为ID:
<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" />
然后我得到了 以前 下一个 完 在我的string.xml文件中。
因此&#34;之前&#34;按钮是菜单布局文件中唯一定义的按钮; &#34; next&#34;按钮和&#34;完成&#34;按钮既可以作为ID出现,但对于&#34; next&#34;而言,这似乎并不是一个问题。按钮就像它完成&#34;完成&#34;按钮。 为什么它与&#34;完成&#34;相同?按钮?
编辑:已解决
解决方案以这种方式工作:
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;
}
非常感谢!
答案 0 :(得分:1)
菜单对象itemId
的add()方法中的第二个参数提到:
Unique item ID. Use NONE if you do not need a unique ID.
您为该按钮指定的ID为R.id.action_next
。你确实有一个条件,但最后一个参数titleRes
是Resource identifier of title string
。因此,当您同时更改作为项目ID的add()
方法的第二个参数时,您只需更改插入菜单的菜单项上的标题。
结论:menu.add()
方法的第二个参数必须有另一个条件赋值,其操作方式与第四个参数的方法相同。
答案 1 :(得分:1)
很好的答案,它就是这样的:
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;
}