Android: كيفية إغلاق النشاط الأمامي من النشاط النشط؟
-
18-09-2019 - |
سؤال
لقد قمت بإنشاء تطبيق يتواصل بشكل غير متزامن مع الخادم. عندما يقوم التطبيق بإجراء خادم طلب حوار جديد (نشاط) يتم إنشاء إعلام "تحميل". ينفذ النشاط الرئيسي طرق لمعالجة استجابات الخادم وأرغب في إغلاق النشاط الأمامي عندما يتلقى النشاط الرئيسي الإجابة من الخادم.
يتم إنشاء مربع حوار الإعلام الطريقة التالية:
private void showServerRequestDialog(String actionLabel){
Intent intent = new Intent(this, DlgServerRequest.class);
intent.putExtra(SERVER_REQUEST_ACTION, actionLabel);
startActivity(intent);
}
لذلك عندما يحاول المستخدم مصادقة الطريقة التالية يسمى:
private void authenticateUser(String IMEI, String username, String password){
mEncoderConnection.authenticateRequest(IMEI, username, password);
showServerRequestDialog("Authenticating...");
}
و Onauthenticater الاستجابة لهابض المصادقة
public void onAuthenticateResponse(AuthenticateResponse pkg) {
//code for response handling
//TODO: close ServerRequestDialog
}
}
سأكون ممتنا لو كان بإمكان أي شخص أن يقترح طريقة لإغلاق مربع حوار الإعلام (dlgserverRequest) عند تنفيذ OnauthenticateUser ().
المحلول
لماذا لا تستخدم حقيقي ProgressDialog
أو البعض الآخر Dialog
ب ثم، كل ما عليك القيام به هو dismissDialog()
, ، إنتهيت؟
إذا كان هذا غير مقبول، فاحصي دورتين رئيسيتين أستطيع أن أرى:
- نقل منطق المصادقة الخاص بك إلى
DlgServerRequest
فئة، لذلك يمكنfinish()
بحد ذاتها. - ضع مثيل الخاص بك
DlgServerRequest
فئة في عضو بيانات ثابت حتى تتمكن نشاطك الرئيسي الاتصالfinish()
عليه
إذا اخترت الخيار رقم 2، فمن المهم حقا null
خارج عضو البيانات الثابتة لتجنب تسرب الذاكرة.