Android: كيفية إغلاق النشاط الأمامي من النشاط النشط؟

StackOverflow https://stackoverflow.com/questions/1487125

سؤال

لقد قمت بإنشاء تطبيق يتواصل بشكل غير متزامن مع الخادم. عندما يقوم التطبيق بإجراء خادم طلب حوار جديد (نشاط) يتم إنشاء إعلام "تحميل". ينفذ النشاط الرئيسي طرق لمعالجة استجابات الخادم وأرغب في إغلاق النشاط الأمامي عندما يتلقى النشاط الرئيسي الإجابة من الخادم.

يتم إنشاء مربع حوار الإعلام الطريقة التالية:

 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(), ، إنتهيت؟

إذا كان هذا غير مقبول، فاحصي دورتين رئيسيتين أستطيع أن أرى:

  1. نقل منطق المصادقة الخاص بك إلى DlgServerRequest فئة، لذلك يمكن finish() بحد ذاتها.
  2. ضع مثيل الخاص بك DlgServerRequest فئة في عضو بيانات ثابت حتى تتمكن نشاطك الرئيسي الاتصال finish() عليه

إذا اخترت الخيار رقم 2، فمن المهم حقا null خارج عضو البيانات الثابتة لتجنب تسرب الذاكرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top