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);
16
demandé sur Dheeraj V.S. 2011-08-27 05:25:24

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.

5
répondu trevor-e 2017-05-23 12:26:01

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

2
répondu user3044482 2014-06-02 21:18:32

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é

1
répondu Munish Kapoor 2016-09-26 02:10:03

utilisez le paquet de compatibilité puis construisez votre boîte de dialogue en utilisant DialogFragment

0
répondu Philip Pearl 2011-11-20 20:54:16

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);
0
répondu leopragi 2016-09-24 04:17:07