dans le dialogue Android, comment configurer onActivityResult pour startActivityForResult?
A partir d'une activité, je peux facilement configurer le onActivityResult()
et appeler startActivityForResult()
et tout fonctionne bien.
Maintenant, j'ai besoin d'appeler startActivityForResult()
à partir de la boîte de Dialogue. Mais je ne peux pas configurer le onActivityResult()
je crois Dialog
n'est pas Activity
.
Comment obtenir le résultat?
j'ai essayé quelque chose comme ça dans une boîte de dialogue mais ça a échoué.
//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);
5 réponses
Vous pouvez déclarer votre Activity
avoir Dialog
thème. Regardez dans cette SORTE de question: Android Activité comme une boîte de dialogue
vous changeriez cela dans votre AndroidManifest.xml
fichier:
<activity android:theme="@android:style/Theme.Dialog" />
vous devriez pouvoir utiliser startActivityForResult()
comme d'habitude. Je sais que le BluetoothChat
exemple le programme Android utilise quelque chose de similaire pour retourner le périphérique Bluetooth que vous choisissez d'un Dialog
liste.
si votre dialogue est un dialogue fragment que vous pouvez utiliser
getActivity().startActivityForResult(intent);
de cette façon le résultat est envoyé à l'activité qui a créé le dialogue
Vous pouvez utiliser DialogFragment au lieu de Dialog. Parce que le dialogue est secondaire à son activité. Lorsque vous commencez l'activité avec startActivityForResult (), votre dialogue est rejeté
Un Autre Exemple Utilise Callback
Créer Interface
public interface DialogCallback {
void getResults(String results);
}
Créer 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");
}
}
Dans votre Activité
@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);
}
}
};
Sortie
quand vous rejetez le DialogFragment vous allez voir "bonjour" Journal Activité
utilisez le paquet de compatibilité puis construisez votre boîte de dialogue en utilisant DialogFragment
sur le constructeur de dialogue passer la référence de l'activité parent, alors vous pouvez utiliser dans le dialogue comme ceci,
parentActivity.startActivityForResult(intent, CODE);