簡體   English   中英

如何在Android中為新菜單項設置onclicklistener

[英]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;
    }
});

UPDATE2

也跟隨安克什(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);
}

兩者都嘗試沒有可用的日志...

UPDATE3

為了測試其他菜單,我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM