MainActivity 不是 Fragment Class 中的封闭 class

MainActivity is not an enclosing class in Fragment Class

我打开了两个 Android Studio 项目。一个是实际的应用程序,另一个是测试项目。在测试项目中,我在 MainActivity.java 中使用了这段代码,它运行良好。现在,当我尝试将它转移到我的实际应用程序项目时,它不起作用。可能是因为代码在片段 class 而不是 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;
    }
}

它所做的只是在屏幕上显示消息 "Sending email"。如果需要,我不确定是否应该复制整个 class,如果是这样请告诉我。

错误显示在这一行:

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

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

我不确定该怎么做,因为如果我输入 MainFragment.this,它会报错并提示:“第一个参数类型错误。找到:'com.example.private.privateprivate.MainFragment',需要:'android.content.Context'

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

您需要一个 Context 对象才能调用 show()。当您的 AsyncTask 位于 activity 内部时,获得一个的方法是直接使用 MainActivity.this 引用封装 activity。现在您的任务位于片段中,您不能那样做。但是片段有一个 getActivity() 方法可以 return 它们的 activity,所以你可以用它来代替。