简体   繁体   English

如何在Android中为新菜单项设置onclicklistener

[英]How to make onclicklistener for new menu item in android

I am adding a menu item for texts selection. 我正在添加一个用于文本选择的菜单项。 normally it shows cut,copy,share, etc.. I added a one more item to this menu and named the item as "Mark". 通常它显示剪切,复制,共享等。我在此菜单中又添加了一个项目,并将该项目命名为“标记”。

For this I added the following code in my Activity.Java 为此,我在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);
}

I am able to get my menu item while long press on texts.. Below is the screen, which reflects my menu item. 长按文本时,我可以获取菜单项。以下是反映我的菜单项的屏幕。

在此处输入图片说明

For this menu item, I want to do something while select it. 对于此菜单项,我想在选择它时做一些事情。 So, I used the following code. 因此,我使用了以下代码。

@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);
}

Here, I am not able to get the message "MenuItem Mark clicked----" or "MenuItem clicked---- Mark" in my Logcat. 在这里,我无法在Logcat中收到消息“ MenuItem Mark clicked ----”或“ MenuItem clicked ---- Mark”。

How may I do this? 我该怎么办?

update 更新

Followed Elitz's answer, but still no luck. 跟随Elitz的回答,但仍然没有运气。 my Changes below 我的以下更改

@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);
}

Added updated answer and still no messages came in Logcat 添加了更新的答案,但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;
    }
});

update2 UPDATE2

Followed Ankesh's answer also, 也跟随安克什(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);
}

Both attempt there is no logs available... 两者都尝试没有可用的日志...

Update3 UPDATE3

For test the other menu, I found id for selectAll menu item in R,java, and tried the following code, 为了测试其他菜单,我在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);
}

this is also not showing the message in Logcat. 这也不会在Logcat中显示该消息。 Is this function is right one for menu items selection. 此功能对菜单项选择是否正确? or what else I am missing in this? 还是我在这方面还缺少什么?

use this instead of your menu.add("Mark"); 用它代替你的menu.add("Mark");

add(int groupId, int itemId, int order, CharSequence title);

now you have your Id now you can check for that. 现在您有了自己的Id现在可以进行检查。

groupId = 0; and order = 0; order = 0; , or any number that fits your choice, but since in your example you have only 1 group, just put 0. ,或任何适合您选择的数字,但是由于在您的示例中您只有1个组,因此只需输入0。

hmm.. i think you got us all fooled :) yes it will not work, because you are using ActionMode right and with ActionMode you need to specify a callback for it, so you should put your code here 嗯..我想你让我们都愚弄了:)是的,它是行不通的,因为你使用ActionMode权,并与ActionMode你需要为它指定一个回调,所以你应该在这里把你的代码

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem arg1) {
        return false;
    }

in its callback. 在其回调中。 like something like this, when you call startActoinMode 就像这样,当您调用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;
    }
});

Use 采用

if (item.getItemId() == R.id.xyz) { 

}

Can you just add your menu item inside your xml menu(I mean inside R.menu.main )? 您可以仅将菜单项添加到xml菜单中(我的意思是在R.menu.main )吗? And after that just detect the item click inside this method: 然后,只需检测项目,请在此方法内单击:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_item_id:
            //TODO click detected!!
            break
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Its that or I don't understand your question :) 这就是我不明白你的问题:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM