الروبوت - التبديل بين وضع المناظر الطبيعية والصورة يجعل القيم تفقد القيم

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

سؤال

أنا أستخدم النوايا للتبديل بين الأنشطة في تطبيق Android الخاص بي. أنا أضع البيانات في النية للاستخدام في النشاط التالي. عندما أطفئ الهاتف بين أفقات المناظر الطبيعية والصورة، يتم فقد القيم التي تم تمريرها من النية وحصلت على nullpointerException.

يمكن للشخص من فضلك قل لي ما يمكن أن يكون خطأ.

هناك الكثير من التعليمات البرمجية لنشرها بالكامل. ولكن إذا كان شخص ما يحتاج إلى النظر في أجزاء محددة من التعليمات البرمجية، يمكنني نشره هنا.

يحرر
أنا حل مسألة الدولة التي لا يتم حفظها. لكن مشكلة أخرى واجهتها هي أن أيا من الأزرار على الشاشة تعمل بعد تغيير الاتجاه. على زر الصحافة، أحصل على هذا التحذير في Logcat

02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0

الرجاء المساعدة.

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

المحلول

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

هذه الرابط على سلسلة من دروس الاتجاه و هذا الأول على وجه الخصوص، يجب أن تساعدك على فهم ما يحدث بالضبط وكيفية الحفاظ على حالتك الحالية بنجاح.

تحديث: هناك أيضا وظيفة على ذلك إعادة تشغيل النشاط على الدوران الروبوت يتناول نفس الشيء تقريبا.

تحرير للمتابعة سؤال:

هل قمت بإعادة إرفاق معالجاتك النقر بعد تغيير الاتجاه؟

نصائح أخرى

اكتب هذا في ملف البيان الخاص بك .. في أي نشاط تريد هذا

 android:configChanges="orientation|keyboardHidden"

تحرير: استخدم هذا واحد للحصول على إصدارات APIS الجديدة -

android:configChanges="orientation|keyboardHidden|screenSize"

بالتأكيد سوف تعمل ..

جرب هذا:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(SOME_KEY, "blah blah blah");
}

@Override
public void onCreate(Bundle savedInstanceState) {
   ...
   somevalue = savedInstanceState.getString(SOME_KEY);
   ...
}

من الممكن إعلان سمة Android: ConfigChanges بقيمة "الاتجاه"، سيمنع هذا النشاط من إعادة تشغيله. بدلا من ذلك، يظل النشاط قيد التشغيل ويتم استدعاء طريقة OnConfigverChanged ().

يعلن < android:configChanges="orientation|keyboardHidden"/> في بيانك. هذا يسمح لك بإدارة تغيير وضوح لوحة المفاتيح / لوحة المفاتيح من قبل نفسك. بالطبع، لا تحتاج إلى تجاوز طريقة رد الاتصال لإدارة ذلك.

مرحبا أيضا واجهت هذه المشكلة. ما إصلاحه بالنسبة لي كان:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putString("Username", mUsername);
    savedInstanceState.putString("Password", mPassword);
    savedInstanceState.putString("UserID", mUserID);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

ثم في oncom ():

if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        mUsername = "?";
        mPassword = "?";
        mUserID = "?";
    } else {
        mUsername = extras.getString("Username");
        mPassword = extras.getString("Password");
        mUserID = extras.getString("UserID");
    }
} else {
    mUsername = (String) savedInstanceState.getSerializable("Username");
    mPassword = (String) savedInstanceState.getSerializable("Password");
    mUserID = (String) savedInstanceState.getSerializable("UserID");
}

ثم يمكنك التأكد من أن الكائنات ليست فارغة.

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