make - welcome page in android studio




Android SplashScreen (3)

أقوم بتطوير تطبيق يقوم في الأساس بتنزيل الكثير من البيانات في بداية التطبيق نفسه ويعرضها في ListActivity. ما أخطط للقيام به هو إظهار شاشة Splash حتى يتم تحميل البيانات.

حتى الآن كانت كل محاولاتي غير مجدية. لقد حاولت استخدام الطرق المذكورة ، ولكن مشكلتي هي أن النشاط الرئيسي يجب أن يبدأ ولكن يجب أن تكون شاشة Splash مرئية حتى أقوم بتعبئة قائمتي ListActivity. لذلك باختصار لا بد لي من الذهاب من خلال الخطوات التالية:

  1. ابدأ نشاطي الرئيسي.
  2. إظهار شاشة Splash.
  3. استمر في تشغيل العملية في الخلفية.
  4. قم بإنهاء Splashscreen عند اكتمال المعالجة وإظهار القائمة الرئيسية.

آمل أن تفهم ما هو عليه مثل ....


  1. ابدأ نشاطي الرئيسي.
  2. إظهار شاشة Splash.
  3. استمر في تشغيل العملية في الخلفية.
  4. قم بإنهاء Splashscreen عند اكتمال المعالجة وإظهار القائمة الرئيسية.

حاولت بهذه الطريقة ، لكن المشكلة هي ؛ ستعرض النشاط الرئيسي قبل بدء نشاط شاشة البداية.

لقد صنعتها بهذه الطريقة:

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

مشكلتي هي كيفية تعطيل "إظهار قائمة نشاط شاشة Splash" عن طريق الضغط على زر القائمة.

تصحيح:

تعطيل قائمة العروض:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // getMenuInflater().inflate(R.menu.activity_main, menu);
    return false;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {       
    // return super.onMenuItemSelected(featureId, item);
    return false;
}

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

لذا ، فإن طريقة onCreate () لنشاطك ستعمل ببساطة على إنشاء ProgressDialog وإظهاره. ثم قم بإنشاء AsyncTask وبدء تشغيله. سأجعل AsyncTask فئة داخلية لنشاطك الرئيسي ، لذا يمكنه تخزين البيانات التي قام بتنزيلها إلى بعض المتغيرات في نشاطك وإغلاق ProgressDialog في أسلوب onPostExecute () الخاص به.

لست متأكدًا من كيفية التوضيح بعد ذلك دون إظهار الرمز ، لذلك هنا:

public class MyActivity extends Activity {
    private ProgressDialog pd = null;
    private Object data = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Show the ProgressDialog on this thread
        this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);

        // Start a new thread that will download all the data
        new DownloadTask().execute("Any parameters my download task needs here");
    }

    private class DownloadTask extends AsyncTask<String, Void, Object> {
         protected Object doInBackground(String... args) {
             Log.i("MyApp", "Background thread starting");

             // This is where you would do all the work of downloading your data

             return "replace this with your data object";
         }

         protected void onPostExecute(Object result) {
             // Pass the result data back to the main activity
             MyActivity.this.data = result;

             if (MyActivity.this.pd != null) {
                 MyActivity.this.pd.dismiss();
             }
         }
    }    
}

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

يمكن الاطلاع على بعض القراءة الجيدة حول موضوع AsyncTasks في Android here here .


مثال على شاشة Splash:

public class MainActivity extends Activity {
    private ImageView splashImageView;
    boolean splashloading = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        splashImageView = new ImageView(this);
        splashImageView.setScaleType(ScaleType.FIT_XY);
        splashImageView.setImageResource(R.drawable.ic_launcher);
        setContentView(splashImageView);
        splashloading = true;
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            public void run() {
                splashloading = false;
                setContentView(R.layout.activity_main);
            }

        }, 3000);

    }

}




splash-screen