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,所以你可以用它来代替。
我打开了两个 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,所以你可以用它来代替。