【问题标题】:MainActivity is not an enclosing class in Fragment ClassMainActivity 不是片段类中的封闭类
【发布时间】:2019-05-12 22:19:01
【问题描述】:

我打开了两个 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'

【问题讨论】:

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


    【解决方案1】:

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

    您需要一个Context 对象才能调用show()。当您的 AsyncTask 位于 Activity 中时,获取它的方法是直接使用 MainActivity.this 引用封装的 Activity。既然您的任务存在于 Fragment 中,您就不能这样做了。但是片段有一个getActivity() 方法可以返回它们的活动,所以你可以使用它。

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 1970-01-01
      • 2020-11-21
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      相关资源
      最近更新 更多