سؤال

لدي 3 أنشطة مختلفة يقوم المستخدم بالتنقل بين أي أمر معين. هدفي هو twifold:

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

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

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

المحلول

إذا لم يتم "إنهاء التطبيق الخاص بك"، فيجب بالفعل أن يعمل # 1 بالفعل ويتطلب # 2 فقط حفظ أي قيم لا تدار تلقائيا في الحزمة onsaveinstancestate () ثم استعادة لهم في onrestoreinstancestate ().

هذا هو نوع من الاختراق، لكنني أعتقد أن خيارك الأفضل ل # 1 في حالة أنه تم إنهاء التطبيق في الواقع هو توفير أحدث نشاط في OnResume لكل من فئات نشاطك ثم عند تشغيل OnCreate لأول مرة نشاطك الأول يقوم بفحص، ثم بدء النشاط الصحيح ... ربما حتى وضع نشاط فارغ في البداية. شيء من هذا القبيل:

satedactivity:

public class StartActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // get last open Activity
        String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
        if (last_activity == MyActivity2.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity2.class));
        } else if (last_activity == MyActivity3.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity3.class));
        } else {
            // assume default activity
            startActivityForResult(new Intent(this, MyActivity1.class));
        }
    }

    public void onActivityResult() {
        // kill the activity if they go "back" to here
        finish();
    }
}

ثم في جميع الأنشطة الأخرى (myactivity1،2،3) حفظ القيم مثل ذلك:

@Override
public void onResume() {
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
    e.putString("last_activity", getClass().getSimpleName());
    e.commit();

    super.onResume();
}

سيتعين عليك أيضا التعامل مع توفير / استعادة البيانات لكل نشاط يدويا. يمكنك حفظ جميع القيم التي تحتاجها في التفضيلات داخل OnPause () من كل من الأنشطة ثم استعادتها في OnResume ().

نصائح أخرى

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

أعتقد أنك تريد تنفيذ OnsaveInstanCestate وسيخزن أنشطتك الدولة الحالية في حزمة. سيتم تمرير هذه الحزمة إلى نشاطك في OnCreaTe، ويمكنك استخدامها لإعادة تعيين قيمك.

http://developer.android.com/guide/topics/fundamentals.htmlomhactstate.

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