Ho una finestra di dialogo che mostra un elenco di elementi, ho bisogno di essere in grado di modificare/eliminare elementi in questo elenco in modo da mettere un menu contestuale in modo che quando l'utente preme a lungo elemento in cui possono scegliere cosa vogliono fare (modificare o eliminare l'elemento).onContextItemSelected non viene chiamato in un DialogFragment
Il problema è che onContextItemSelected
non viene mai chiamato quando viene selezionato un elemento nel menu di scelta rapida.
Ho controllato se forse l'attività che ha creato il frammento di dialogo sta ricevendo la richiamata, ma non è così, perché non viene chiamata? Non puoi fare un menu contestuale in una finestra di dialogo?
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;
}
}
selezionare la risposta qui sotto, si sta lavorando – Nasrudeen
probabilmente l'attività di hosting ha 'implementazione onContextItemSelected' che non richiede' super'. Questo era il problema nel mio caso (un po 'simile). – Stan