MainActivity不是片段类

时间:2018-12-11 21:09:01

标签: java android android-studio android-fragments main-activity

我打开了两个Android Studio项目。一个是实际的应用程序,另一个是测试项目。在测试项目中,我在MainActivity.java中使用了此代码,并且效果很好。现在,当我尝试将其转移到我的实际应用程序项目中时,它不起作用。可能是因为代码位于片段类而不是MainActivity中。

这是我正在谈论的代码:

private class SendMailTask extends AsyncTask<Message, Void, Void> {
    private ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Sending mail", true, false);
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        progressDialog.dismiss();
    }

    @Override
    protected Void doInBackground(Message... messages) {
        try {
            Transport.send(messages[0]);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

它的作用只是在屏幕上显示“正在发送电子邮件”消息。我不确定是否需要复制整个课程,所以请告诉我。

此行显示错误:

progressDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Sending mail", true, false);

它说:'com.example.private.privateprivate.MainActivity'不是一个封闭的类'。

我不确定该怎么办,因为如果我放入MainFragment.this,它会给出一个错误并说:'第一个参数类型错误。找到:“ com.example.private.privateprivate.MainFragment”,必需:“ android.content.Context”

1 个答案:

答案 0 :(得分:0)

使用getActivity()作为第一个参数。

您需要一个Context对象才能调用show()。当您的AsyncTask位于某个活动内部时,获取活动的方法是直接使用MainActivity.this引用该合并活动。现在您的任务位于一个Fragment中,您将无法执行此操作。但是片段具有getActivity()方法,该方法将返回其活动,因此您可以改用它。