[英]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.