2011-03-03 17 views
9

Estoy utilizando el siguiente código para un menú contextual y luego, si el usuario elige eliminar, aparecerá un cuadro de diálogo de masaje.

infos.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){ 
      //@Override 
      public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
       menu.setHeaderTitle("Context Menu"); 
       menu.add(0, CONTEXT_EDIT, 0, "Edit Item"); 
       menu.add(0, CONTEXT_DELETE, 1, "Delete Item"); 
      } 
}); 

public boolean onContextItemSelected(MenuItem item) { 

     AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
     final Long _id = menuInfo.id; 
     //selected_row = menuInfo.position; 

     // To get the id of the clicked item in the list use menuInfo.id 
     switch (item.getItemId()) { 
      case CONTEXT_EDIT: 
       addEditRes(_id); 
       break; 
      case CONTEXT_DELETE: 
       AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       builder.setMessage("Are you sure you want to delete?") 
         .setCancelable(false) 
         .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           infoDataHelper.deleteRes(_id); 
           model = infoDataHelper.getCursor(addType); 
           adapter.changeCursor(model); 
          } 
         }) 
         .setNegativeButton("No", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.cancel(); 
          } 
         }); 
       AlertDialog alert = builder.create(); 
       alert.show(); 
       break; 
      default: 
       return super.onContextItemSelected(item); 

     } 
     adapter.notifyDataSetChanged(); 
     return true; 
} 

Pero, tan pronto como elija la eliminación, aparece el siguiente error.

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 

¿Cuál es el problema en mi código?

Respuesta

6

Debe ser AlertDialog.Builder builder = new AlertDialog.Builder (this.getParent());

Porque la actividad está en una tabactivity dentro de otra tabactivity.

28

Creo que el problema podría estar en esta línea:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

intente modificar a:

AlertDialog.Builder builder = new AlertDialog.Builder(MyActivityName.this); 

Sustitución MyActivityName con el nombre de su actividad.

¿Corregió el error?

+0

¡Solucionado por mí! Gracias :) –

6

Me estaba saliendo el mismo error. me cambió

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

a

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 

Su trabajo bien ahora. Gracias.

Cuestiones relacionadas