[英]onContextItemSelected does not get called in a DialogFragment
[英]onContextItemSelected doesn't get called
我制作了一個簡單的應用程序,它只顯示一個 AlertDialog,列表中有四個項目。 我注冊了一個上下文菜單。 當我長按其中一項時,我會得到上下文菜單。 然后我 select 上下文菜單中的一個項目,但 onContextItemSelected 永遠不會被調用。 有什么幫助嗎? 謝謝。
測試.java:
package com.cerulean.tech.creations.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
public class test extends Activity {
private String[] files;
AlertDialog alert;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
files = new String[4];
}
public void selectScheme(View v) {
files[0] = "<New Scheme>";
files[1] = "test1";
files[2] = "test2";
files[3] = "test3";
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setItems(files, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
}});
alert = builder.create();
alert.show();
registerForContextMenu(alert.getListView());
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Context Menu");
menu.add(0, v.getId(), 0, "Delete");
menu.add(0, v.getId(), 0, "Cancel");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
return false;
}
}
在 main.xml 中,我只是一個用 android:onClick="selectScheme" 定義的按鈕
在這一行之后:
registerForContextMenu(alert.getListView());
輸入這個:
alert.getListView().setOnCreateContextMenuListener(this);
而不是 onContextItemSelected(MenuItem item) function 使用這個:
@Override
public boolean onMenuItemSelected(int featureId, MenuItem menuItem) {
以下 function 總是被執行。
public boolean onMenuItemSelected(int featureId, MenuItem menuItem)
但是您可以使用以下標志區分上下文菜單和選項菜單:
if (featureId == Window.FEATURE_CONTEXT_MENU)
{
//Do something
}
else if (featureId == Window.FEATURE_OPTIONS_PANEL)
{
//Do something else
}
只需添加
@Override
public boolean onMenuItemSelected(int aFeatureId, MenuItem aMenuItem) {
if (aFeatureId==Window.FEATURE_CONTEXT_MENU)
return onContextItemSelected(aMenuItem);
else
return super.onMenuItemSelected(aFeatureId, aMenuItem);
}
我想以三木的回答為基礎。
我只用過
registerForContextMenu(this.getListView());
和
this.getListView().setOnCreateContextMenuListener(this);
在我的父母 ListActivity class 中。
我將代碼從onContextItemSelected(MenuItem item)方法移到了onMenuItemSelected方法。
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
try {
if (item.getItemId() == R.id.new_entry_menu_option) {
...
}
...
if (item.getItemId() == R.id.quit) {
/* perform cleanup */
...
return true;
} else if (item.getItemId() == R.id.delete_entry_context_menu_option) {
displayConfirmRequest(DELETE_CONFIRMATION_MESSAGE, item);
return true;
} else if (item.getItemId() == R.id.2ND_CONTEXT_OPTION) {
//code for 2nd option
return true;
} else if (item.getItemId() == R.id.3RD_CONTEXT_OPTION) {
//code for 3RD option
return true;
} else {
return super.onMenuItemSelected(featureId, item);
}// end if/else if/else
}// end try
catch (Exception error) {
//error handler code
return false;
}// end try/catch
}// end onMenuItemSelected
並確保在您的子類中,如果您在super.ListActivity class 的子類中覆蓋 onMenuItemSelected ,如果您希望在 super.class 中處理上下文菜單選項,請包含以下代碼。
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (<condition>) {
...
} else {
return super.onMenuItemSelected(featureId, item);
}
}// end onMenuItemSelected
此問題的真正原因是您正在覆蓋onContextItemSelected
而沒有調用super.onContextItemSelected
。 將您的onContextItemSelected
方法更改為:
@Override
public boolean onContextItemSelected(MenuItem item) {
if (super.onContextItemSelected(MenuItem item))
return true;
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.