8 votes

Obtenir l'activité actuelle du fragment

J'ai cette classe pour envoyer des emails avec Android

    public class SendMailTask extends AsyncTask {

    private ProgressDialog statusDialog;
    private Activity sendMailActivity;

    public SendMailTask(Activity activity) {
        sendMailActivity = activity;

    }

    protected void onPreExecute() {
        statusDialog = new ProgressDialog(sendMailActivity);
        statusDialog.setMessage("Getting ready...");
        statusDialog.setIndeterminate(false);
        statusDialog.setCancelable(false);
        statusDialog.show();
    }

    @Override
    protected Object doInBackground(Object... args) {
        try {
            Log.i("SendMailTask", "About to instantiate GMail...");
            publishProgress("Processing input....");
            GMail androidEmail = new GMail(args[0].toString(),
                    args[1].toString(), (List) args[2], args[3].toString(),
                    args[4].toString());
            publishProgress("Preparing mail message....");
            androidEmail.createEmailMessage();
            publishProgress("Invio email in corso, sarai ricontattato da un nostro operatore per la conferma");
            androidEmail.sendEmail();
            publishProgress("Email Sent.");
            Log.i("SendMailTask", "Mail Sent.");
        } catch (Exception e) {
            publishProgress(e.getMessage());
            Log.e("SendMailTask", e.getMessage(), e);
        }
        return null;
    }

    @Override
    public void onProgressUpdate(Object... values) {
        statusDialog.setMessage(values[0].toString());

    }

    @Override
    public void onPostExecute(Object result) {
        statusDialog.dismiss();
    }
}

Sans utiliser de fragments, j'utilise le code suivant dans la MainActivity pour envoyer un courrier électronique

new SendMailTask(MainActivity.this).execute(fromEmail,
                   fromPassword, toEmailList, emailSubject, emailBody);

Mais maintenant, je dois utiliser Fragment et j'obtiens une erreur à ce stade : "MainActivity.this its not an enclosing class"

Comment puis-je résoudre cette erreur ?

P.S. : Désolé pour mon mauvais anglais :D

9voto

Lavanya Pant Points 711

Changez le code ci-dessous

new SendMailTask(MainActivity.this).execute(fromEmail,
                   fromPassword, toEmailList, emailSubject, emailBody);

A

new SendMailTask(getActivity()).execute(fromEmail,
                   fromPassword, toEmailList, emailSubject, emailBody);

Pour plus de détails, vous pouvez consulter le lien ci-dessous.

Accéder à l'activité à partir d'un fragment

9voto

BOUTERBIAT Oualid Points 989

Du fragment à l'activité, utilisez ce :

((YourActivityName)getActivity()).yourPublicMethod();

De l'activité au fragment, utilisez ce :

FragmentManager fragmentManager = getSupportFragmentManager();
//include fragment via layout xml
YourFragmentClass fragment = (YourFragmentClass)fragmentManager.findFragmentById(R.id.your_fragment_id);
fragment.yourPublicMethod();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X