GetActivity () es nulo dentro de AlertDialog de un fragmento

¿Por qué getActivity() devuelve null dentro de AlertDialog ?

Esta es la clase –

 Class A extends Common{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Button save = (Button) view.findViewById(R.id.save); save.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("the activity outside dialog.."+getActivity()); AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); alert.setPositiveButton("Check acitivity", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.cancel(); System.out.println("the activity inside dialog.."+getActivity()); } }); } } 

La clase común está extendiendo el fragmento como –

 import android.support.v4.app.Fragment; Class Common extends Fragment { //Some code } 

Y la salida es –

 the activity outside dialog..com.testapp.main.MainActivity@42131080 the activity inside dialog..null 

  Activity activity; @Override public void onAttach(Activity activity) { super.onAttach(activity); this.activity=activity; } 

I think getActivity () dentro DialogInterface está apuntando al contexto del diálogo

 dialog.getActivity() 

Dentro de su DialogInterface intente cambiarlo a:

 A.this.getActivity(); 

Edit : he comprobado el getActivity () dentro de DialogInterface y debería funcionar bien.

Otra solución podría estar utilizando onAttach función de devolución de llamada y obtener su actividad Contexto allí para asegurarse de que su fragmento adjunto a la actividad de los padres antes de utilizarlo en el diálogo. Luego usarlo en lugar de getActivity ().

 @Override public void onAttach(Activity activity) { super.onAttach(activity); yourActivity = activity; } 

Reemplazar getActivity () a A.this

 AlertDialog.Builder alert = new AlertDialog.Builder(A.this); 
 Why the getActivity() is returning null inside AlertDialog ? 

Esto se debe a que está llamando a getActivity () de la DialogInterface.OnClickListener no su fragmento por lo que le da nulo.

solución:

 A.this.getActivity(); 

Usted necesita llamar a la referencia de su clase usando el this y llamar al método getActivity()

EDITAR:

 @Override public void onClick(View v) { System.out.println("the activity outside dialog.."+getActivity()); AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); alert.setPositiveButton("Check acitivity", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { System.out.println("the activity inside dialog.."+ A.this.getActivity()); dialog.cancel(); } }); 

getActivity() devuelve null hasta que Fragment no se agregue a la actividad.

Usted supone para crear el objeto después de llamadas del método de onAttach.

Puede crear un objeto en el método onCreateview para obtener las mejores prácticas.

Basándome en las respuestas de Sudhi S y Arash, creo que esta es una opción más limpia que se ocupa de la Actividad localmente al método que lo llama:

 private void showDialog() { final Activity activity = getActivity(); AlertDialog.Builder builder = new AlertDialog.Builder(activity) .setTitle(R.string.my_title) .setMessage(R.string.my_message) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.e(TAG, "the activity inside dialog... " + activity); } }); final AlertDialog dialog = builder.create(); dialog.setCanceledOnTouchOutside(true); dialog.show(); } 
  • Cómo evitar llamar a onCreateView cuando el botón de nuevo presionado en el fragmento en android
  • ListView dentro de un fragmento utilizado en un ViewPager no se comporta como se esperaba
  • Cómo utilizar el fragmento con Viewpager para páginas de desplazamiento
  • No se puede actualizar / actualizar listview en un fragmento de otro fragmento en ViewPager
  • Cómo enviar cursor de la actividad de Android para fragmentar
  • Extender FragmentActivity en lugar de Activity
  • Fragmento ya agregó IllegalStateException
  • No se puede publicar la vista en <fragmento>
  • Implementación de DatePicker en Fragmento
  • Mapas android dejar de responder después de reanudar el fragmento
  • Eclipse crea automáticamente el diseño del fragmento, ¿cómo puedo desactivarlo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.