Ich habe einen Dialog, der eine Liste von Elementen zeigt, ich muss in der Lage sein, Elemente in dieser Liste zu bearbeiten/zu löschen, also setze ich ein Kontextmenü, wenn der Benutzer lange auf eine drückt Sie können wählen, was sie tun möchten (Bearbeiten oder Löschen des Elements).onContextItemSelected wird nicht in einem DialogFragment aufgerufen
Das Problem ist, dass onContextItemSelected
nie aufgerufen wird, wenn ein Element im Kontextmenü ausgewählt ist.
Ich überprüfte, ob die Aktivität, die das Dialogfragment erstellt hat, vielleicht den Callback bekommt, aber das ist auch nicht so warum wird es nicht aufgerufen? Können Sie in einem Dialog kein Kontextmenü erstellen?
public class TypesDialogList extends DialogFragment implements LoaderManager.LoaderCallbacks<Cursor>,OnItemClickListener,OnCreateContextMenuListener{
ListView lv;
SimpleCursorAdapter mAdapter;
private int EDIT_TYPE = 1;
private int DELETE_TYPE = 2;
OnEditType mType;
public Dialog onCreateDialog(Bundle state){
final View v = getActivity().getLayoutInflater().inflate(R.layout.layer_dialog_layout, null, false);
lv = (ListView)v.findViewById(R.id.listView1);
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lv.setOnItemClickListener(this);
lv.setOnCreateContextMenuListener(this);
return new AlertDialog.Builder(getActivity()).setView(v).setPositiveButton("Add Type", new OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
}
}).setTitle("Type's").create();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
long id = info.id;
if(id > 3){
menu.setHeaderTitle("Type Menu");
menu.add(Menu.NONE, EDIT_TYPE, 1, "Edit");
menu.add(Menu.NONE, DELETE_TYPE, 2, "Delete");
}else{
Toast.makeText(getActivity(),"Cannot edit type",Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item);
AdapterView.AdapterContextMenuInfo oMenuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
long id = oMenuInfo.id;
if(item.getItemId() == EDIT_TYPE){
}else if(item.getItemId() == DELETE_TYPE){
}
return true;
}
}
die unten Antwort wählen, es – Nasrudeen
Wahrscheinlich die Hosting-Aktivität hat 'onContextItemSelected' Implementierung arbeitet, die nicht' super' nicht nennen. Das war das Problem in meinem (etwas ähnlichen) Fall. – Stan