2011-08-27 33 views
16

Desde una actividad, puedo configurar fácilmente el onActivityResult() y llamar al startActivityForResult() y todo funciona bien.dentro de Android Dialog, cómo configurar onActivityResult para startActivityForResult?

Ahora, necesito llamar al startActivityForResult() desde el cuadro de diálogo. Pero no puedo configurar el onActivityResult(), creo que Dialog no es un Activity.

¿Cómo obtengo el resultado?

Intento algo así dentro de un cuadro de diálogo pero falló.

//create new Intent 
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, m_PicUri); 
((Activity) getContext()).startActivityForResult(intent, Const.TAKE_PIC_ACTIVITY_RET_CODE); 
+0

Proporcione el código de creación e inicio de diálogo, por favor. – Jin35

+0

@ tony-p-lee cualquier solución –

Respuesta

0

utilizar el paquete de compatibilidad a continuación, construir su diálogo utilizando DialogFragment

5

Se puede declarar su Activity tener un tema Dialog. Mira en esta cuestión de forma: Android Activity as a dialog

Se podría cambiar esto en su archivo AndroidManifest.xml:

<activity android:theme="@android:style/Theme.Dialog" /> 

usted debería ser capaz de utilizar startActivityForResult() como normal. Sé que el programa de ejemplo Android BluetoothChat utiliza algo similar para devolver el dispositivo Bluetooth que elijas de una lista Dialog.

+0

Esto debe marcarse como respuesta. Esta es la única manera de hacer lo que está esperando de todos modos. –

+3

Esto no es una respuesta. La pregunta es "Cómo iniciar Activity ForResult() desde el diálogo". Pero no "Cómo declarar la actividad como un diálogo". – Cheung

2

si su diálogo es un fragmento de diálogo que puede usar

getActivity().startActivityForResult(intent); 

de esta manera el resultado se envía a la actividad que creó el diálogo

1

Se puede utilizar en lugar de DialogFragment diálogo. Porque el diálogo es secundario a su actividad.Cuando se inicia la actividad con startActivityForResult(), el diálogo se desestimó

Otro Ejemplo Uso de devolución de llamada

Crear interfaz

public interface DialogCallback { 
    void getResults(String results); 
} 

Crear DialogFragment

public class DialogFragment extends DialogFragment { 

DialogCallback dialogCallback; 

public DialogFragment setCallBack(DialogCallback dialogCallback){ 
    this.dialogCallback = dialogCallback; 
    return this; 
} 

@NonNull 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    return super.onCreateDialog(savedInstanceState); 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.your_layout, container, false); 
    return view; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public void onDismiss(DialogInterface dialog) { 
    super.onDismiss(dialog); 
    dialogCallback.getResults("hello"); 
} 

} 

En su Actividad

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    new DialogFragment().setCallBack(dialogCallback).show(getFragmentManager(),""); 
} 

DialogCallback dialogCallback = new DialogCallback() { 
    @Override 
    public void getResults(String results) { 
     if(results!=null){ 
      Log.e(TAG,results); 
     } 
    } 
}; 

salida

Cuando se cierra la DialogFragment verá el "hola" Entrar en su Actividad

0

En el constructor de diálogo pase la referencia de la Actividad principal, luego puede usar en el cuadro de diálogo de esta manera,

parentActivity.startActivityForResult(intent, CODE); 
Cuestiones relacionadas