سؤال

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

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

سؤال:لماذا تستمر القيم الموجودة في نصوص التحرير الخاصة بي في معظم الأوقات عندما ينتقل الهاتف من وإلى وضع الخمول، ومع ذلك يتم مسحها في مناسبات تبدو عشوائية (وغير مريحة في كثير من الأحيان)؟

لدي شعور بأن السبب في ذلك هو استدعاء onStop() بدلاً من onPause() (أو ربما العكس) في مناسبات معينة، لكن معرفتي بهذه الطرق ليست بالسرعة الكافية بعد.كما أنني أدرك أنه يمكن حل هذه المشكلة عبر ملف SharedPreferences (أو فكرة من هذا القبيل)، ولكن أود أن أعرف ما يحدث من أجل الفهم أكثر من أي شيء آخر.

تفاصيل:

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

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input_param);

    Intent intent = getIntent();
//Rest of the code just builds the layout from data taken from the intent

-لم أتجاوز أيًا من أساليب دورة الحياة (أيonStop() وonResume() وما إلى ذلك) باستثناء onCreate().لا ينبغي لأي من الطرق الأخرى في نشاطي أن يكون لها أي علاقة بالمشكلة/ بقدر ما أستطيع أن أقول

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

المحلول

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

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

http://developer.android.com/reference/android/app/Activity.html

لإصلاح هذه المشكلة، يمكنك تجاوز onSavedInstanceState() طريقة حفظ جهازك EditText القيم ثم onCreate() سوف يسحب هذه القيم مرة أخرى عندما تعود إلى النشاط.ستحتاج بعد ذلك إلى التحقق من مكانك لمعرفة ما إذا كنت بحاجة إلى إعادة سكنك EditTexts من تلك القيم أو إذا كانت فارغة.المزيد عن هذا هنا.

نصائح أخرى

ربما يحدث هذا لأنه يتم استدعاء الأسلوب OnDestroy أو Online في وقت الخمول.سيتم استدعاء OnDestroy في غلاف الذاكرة هو استخدام التطبيق مرتفع.الحل الوحيد في رأيي هو حفظ البيانات في DB محلي كما يتم إدخاله، وإعادة ملء onresume.

لحل مشكلتك في OnPause () طريقة نشاطك تأخذ القيم التي أدخلها المستخدم في المتغيرات الثابتة (ستحتاج إلى عدد المتغيرات مقدار Edittext لديك) وتخزين القيم في المتغيرات وفي OnResume () ضع القيم مرة أخرى إلى Edittext.

giveacodicetagpre.

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