سؤال

مرحبًا يا شباب ، لدي مشكلة في مربع حوار Progress حول فتح نشاط (يسمى النشاط 2 في المثال). النشاط 2 لديه الكثير من التعليمات البرمجية لتنفيذها في هذا الحدث oncreate.

final ProgressDialog myProgressDialog = ProgressDialog.show(MyApp.this,getString(R.string.lstAppWait), getString(R.string.lstAppLoading), true);
new Thread() {
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                showApps();
            }
        });
        myProgressDialog.dismiss();
    }
}.start(); 

SHOWAPPS وظيفة إطلاق النشاط 2.

إذا قمت بتنفيذ هذا الرمز على الحدث ، فمن النقر فوق الزر على النشاط 1 ، أرى التقدم ، لكنها لا تتحرك و Afeter لدي شاشة سوداء خلال 2 أو 3 ثوانٍ لوقت Android لإظهار النشاط.

إذا قمت بتنفيذ هذا الرمز في onCreate of Activity2 ، وإذا قمت باستبدال showapps بواسطة الكود على onCreate ، وتجميد النشاط 1 ، لا أرى مربع حوار التقدم ، وتجميد مرة أخرى 2 ثانية على النشاط 2 قبل رؤية النتيجة.

فكرة ؟

هل كانت مفيدة؟

المحلول

كان لدي نفس المشكلة واستخدام Asynctask يعمل من أجلي.

هناك 3 طرق مهمة للتغلب على Asynctask.

  1. Doinbackground : هذا هو المكان الذي ستحدث فيه لحوم معالجة الخلفية الخاصة بك.
  2. onpreexecute : أظهر ProgressDialog هنا (showdialog)
  3. onpostexecute : إخفاء DrovedDialog هنا (الإزالة أو desissdialog)

إذا قمت بعمل فئة فرعية من Asynctask كفئة داخلية من نشاطك ، فيمكنك استدعاء أساليب Framework Showdialog ، ورفضها ، وإزالتها من داخل التزامن الخاص بك.

إليك تنفيذ عينة من Asynctask:

class LoginProgressTask extends AsyncTask<String, Integer, Boolean> {
  @Override
  protected Boolean doInBackground(String... params) {
    try {
      Thread.sleep(4000);  // Do your real work here
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return Boolean.TRUE;   // Return your real result here
  }
  @Override
  protected void onPreExecute() {
    showDialog(AUTHORIZING_DIALOG);
  }
  @Override
  protected void onPostExecute(Boolean result) {
    // result is the value returned from doInBackground
    removeDialog(AUTHORIZING_DIALOG);
    Intent i = new Intent(HelloAndroid.this, LandingActivity.class);
    startActivity(i);
  }
}

نصائح أخرى

AFAIK لا يمكنك تحميل أي نشاط مع حوار التقدم المعروض. هل تختبر على جهاز حقيقي أم في المحاكي؟

لقد رأيت الحلول التي فتحت نشاطًا مع وجود رسوم متحركة للتقدم في المركز ، وفي العرض التالي ، تم تحميله نشاطًا ، لكن ليس هناك شيء يوصى به ويصعب تنفيذه على العمل كما يحلو لك.

geexor

أود أن أقترح عليك تجنب أداء الكثير من العمليات في النشاط 2. Asynctask أو في موضوع (أو اكتبها onstart إذا كانت لا مفر منها).

الاقتراح الآخر هو بدء تشغيل ProgressDialog آخر في Activity 2 OnCreate والذي سيتم تشغيله حتى يتم تحميل جميع بياناتك وسيعرف المستخدم أن هناك شيئًا ما يحدث في الخلفية.

هذا ما سأفعله. قم بإنشاء معالج على مؤشر ترابط واجهة المستخدم ، وابدأ في معالجة الخلفية ، ثم أظهر ProgressDialog. عند الانتهاء من مؤشر ترابط الخلفية ، فإن العمل يحصل عليه لنشر عملية تشغيل على سلسلة واجهة المستخدم عبر المعالج لرفض الحوار.

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