簡體   English   中英

MainActivity不是Fragment類中的封閉類

[英]MainActivity is not an enclosing class in Fragment Class

我已經打開了兩個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”

使用getActivity()作為第一個參數。

您需要一個Context對象才能調用show() 當您的AsyncTask駐留在活動中時,獲取活動的方法是直接使用MainActivity.this引用合並活動。 現在您的任務位於一個Fragment中,您將無法執行此操作。 但是片段具有一個getActivity()方法,該方法將返回其活動,因此您可以改用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM