菜单项未检测到用户点击 action_finish 按钮
Menu Item not detecting users' click on action_finish button
我有一个 ScreenSlideActivity.java 带有寻呼机的滑动片段。因为我想用屏幕幻灯片动画创建教程,所以我想在用户按下 "finish" 按钮时将用户导航回主 activity。
我的问题是 onOptionsItemSelected 中的菜单项没有检测到用户在 "finish" 按钮上的压力。这是我的代码:
在 onCreateOptionsMenu 中,我附加了三个按钮:"Previous"、"Next" 和 "Finish",并将 "next" 或 "finish" 按钮添加到到操作栏,具体取决于当前选择的页面。
@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);
}
"previous" 按钮是在 "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>
而其他两个只是在 "ids.xml" 中创建为 ids:
<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 文件中。
因此 "previous" 按钮是菜单布局文件中唯一定义的按钮; "next" 按钮和 "finish" 按钮都作为 id 存在,但这对 "next" 按钮来说似乎不是问题,因为它对 "finish" 按钮。
为什么它与 "finish" 按钮的效果不一样?
编辑:已解决
The solution worked this way:
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;
}
非常感谢!
菜单的add()方法中第二个参数objectitemId
提到:
Unique item ID. Use NONE if you do not need a unique ID.
您分配给按钮的 ID 是 R.id.action_next
。您确实有一个条件,但最后一个参数 titleRes
是 Resource identifier of title string
。因此,当您应该 还 更改 add()
方法的第二个参数即项目 ID 时,您只更改插入到菜单中的菜单项的标题。
结论:你的menu.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;
}
我有一个 ScreenSlideActivity.java 带有寻呼机的滑动片段。因为我想用屏幕幻灯片动画创建教程,所以我想在用户按下 "finish" 按钮时将用户导航回主 activity。 我的问题是 onOptionsItemSelected 中的菜单项没有检测到用户在 "finish" 按钮上的压力。这是我的代码:
在 onCreateOptionsMenu 中,我附加了三个按钮:"Previous"、"Next" 和 "Finish",并将 "next" 或 "finish" 按钮添加到到操作栏,具体取决于当前选择的页面。
@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);
}
"previous" 按钮是在 "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>
而其他两个只是在 "ids.xml" 中创建为 ids:
<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 文件中。
因此 "previous" 按钮是菜单布局文件中唯一定义的按钮; "next" 按钮和 "finish" 按钮都作为 id 存在,但这对 "next" 按钮来说似乎不是问题,因为它对 "finish" 按钮。 为什么它与 "finish" 按钮的效果不一样?
编辑:已解决
The solution worked this way:
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;
}
非常感谢!
菜单的add()方法中第二个参数objectitemId
提到:
Unique item ID. Use NONE if you do not need a unique ID.
您分配给按钮的 ID 是 R.id.action_next
。您确实有一个条件,但最后一个参数 titleRes
是 Resource identifier of title string
。因此,当您应该 还 更改 add()
方法的第二个参数即项目 ID 时,您只更改插入到菜单中的菜单项的标题。
结论:你的menu.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;
}