[英]How to make onclicklistener for new menu item in android
我正在添加一个用于文本选择的菜单项。 通常它显示剪切,复制,共享等。我在此菜单中又添加了一个项目,并将该项目命名为“标记”。
为此,我在Activity.Java中添加了以下代码
@Override
public void onActionModeStarted(ActionMode mode) {
if (mActionMode == null) {
mActionMode = mode;
Menu menu = mode.getMenu();
menu.add("Mark");
mode.getMenuInflater().inflate(R.menu.main, menu);
}
super.onActionModeStarted(mode);
}
长按文本时,我可以获取菜单项。以下是反映我的菜单项的屏幕。
对于此菜单项,我想在选择它时做一些事情。 因此,我使用了以下代码。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if( item.getTitle().equals("Mark")){
System.out.println("MenuItem Mark clicked----");
Log.d("MenuItem clicked----", "Mark");
}
return super.onOptionsItemSelected(item);
}
在这里,我无法在Logcat中收到消息“ MenuItem Mark clicked ----”或“ MenuItem clicked ---- Mark”。
我该怎么办?
跟随Elitz的回答,但仍然没有运气。 我的以下更改
@Override
public void onActionModeStarted(ActionMode mode) {
if (mActionMode == null) {
mActionMode = mode;
Menu menu = mode.getMenu();
menu.add(0,1000,0,"Mark");
mode.getMenuInflater().inflate(R.menu.main, menu);
}
super.onActionModeStarted(mode);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == 1000) {
System.out.println("MenuItem Mark clicked----");
Log.d("MenuItem clicked----", "Mark");
}
return super.onOptionsItemSelected(item);
}
添加了更新的答案,但Logcat中仍然没有消息
private ActionMode.Callback startActionMode = (new ActionMode.Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu yourMenu) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu yourMenu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem yourMenu) {
Log.d("MenuItem clicked----303", "Mark");
if (yourMenu.getItemId() == R.attr.actionModeSelectAllDrawable) {
System.out.println("MenuItem Mark clicked----305");
Log.d("MenuItem clicked----", "Mark");
}
return true;
}
});
也跟随安克什(Ankesh)的回答,
@Override
public void onActionModeStarted(ActionMode mode) {
if (mActionMode == null) {
mActionMode = mode;
Menu menu = mode.getMenu();
menu.add(R.id.privateText);
mode.getMenuInflater().inflate(R.menu.main, menu);
}
super.onActionModeStarted(mode);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.privateText) {
System.out.println("MenuItem Mark clicked----");
Log.d("MenuItem clicked----", "Mark");
}
return super.onOptionsItemSelected(item);
}
两者都尝试没有可用的日志...
为了测试其他菜单,我在R,java中找到了selectAll菜单项的ID,并尝试了以下代码,
@Override
public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.attr.actionModeSelectAllDrawable) {
System.out.println("MenuItem All clicked----");
Log.d("MenuItem clicked----", "All");
}
return super.onOptionsItemSelected(item);
}
这也不会在Logcat中显示该消息。 此功能对菜单项选择是否正确? 还是我在这方面还缺少什么?
用它代替你的menu.add("Mark");
add(int groupId, int itemId, int order, CharSequence title);
现在您有了自己的Id
现在可以进行检查。
groupId = 0;
order = 0;
,或任何适合您选择的数字,但是由于在您的示例中您只有1个组,因此只需输入0。
嗯..我想你让我们都愚弄了:)是的,它是行不通的,因为你使用ActionMode
权,并与ActionMode
你需要为它指定一个回调,所以你应该在这里把你的代码
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem arg1) {
return false;
}
在其回调中。 就像这样,当您调用startActoinMode时
startActionMode(new ActionMode.Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu yourMenu) {
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu yourMenu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem yourMenu) {
//put your item click here
return false;
}
});
采用
if (item.getItemId() == R.id.xyz) {
}
您可以仅将菜单项添加到xml菜单中(我的意思是在R.menu.main
)吗? 然后,只需检测项目,请在此方法内单击:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item_id:
//TODO click detected!!
break
default:
return super.onOptionsItemSelected(item);
}
}
这就是我不明白你的问题:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.