نولبونتيركسيبتيون في أونريسوم عند تعديل الأزرار, لماذا ا?

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

سؤال

أنا الحصول على نولبونتيركسيبتيون التي أثيرت من عدد من المستخدمين بلدي ، وأنا غير قادر على بقعة ما هي المشكلة، يتم طرحها على هذا الخط :

((Button)findViewById(R.id.speakEnglishButton)).setText("");

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

النظر عن كثب في أونريسوم :

@Override
protected void onResume()
{
    super.onResume();

    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    boolean isButtonLabelsEnabled = sp.getBoolean("isButtonLabelsEnabled", false);
    if (!isButtonLabelsEnabled)
    {
        ((Button)findViewById(R.id.speakEnglishButton)).setText("");
        ((Button)findViewById(R.id.speakFrenchButton)).setText("");
        ((Button)findViewById(R.id.speakSpanishButton)).setText("");
        ((Button)findViewById(R.id.speakGermanButton)).setText("");
        ((Button)findViewById(R.id.speakItalianButton)).setText("");
    }
    else
    {
        ((Button)findViewById(R.id.speakEnglishButton)).setText(getString(R.string.btnLblEnglish));
        ((Button)findViewById(R.id.speakFrenchButton)).setText(getString(R.string.btnLblFrench));
        ((Button)findViewById(R.id.speakSpanishButton)).setText(getString(R.string.btnLblSpanish));
        ((Button)findViewById(R.id.speakGermanButton)).setText(getString(R.string.btnLblGerman));
        ((Button)findViewById(R.id.speakItalianButton)).setText(getString(R.string.btnLblItalian));
    }
}

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

يمكن لأي شخص يرجى تقديم المشورة?

شكرا

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

المحلول

هل كل تلك ((زر)فيندفيوبيد(ر. إد. سبيكينغليشبوتون)). سيتكست ("");....في أونكريت()

إضافة

private Button mSpeakEngButton;
.....

كمتغيرات فئة ، قم بتهيئتها في أونكريت()

public void onCreate() {

   ....
   mSpeakEngButton = ((Button)findViewById(R.id.speakEnglishButton));
}

في وقت لاحق في التعليمات البرمجية يمكنك تعديل قيمها كما ممبيبكينغبوتون.أيا كان()

نصائح أخرى

وأعتقد أن النقطة هي أنه عندما يستأنف المستخدم النشاط لم يتم تعيين تخطيط وبالتالي findViewById() لا يوجد لديه 'مرساة' للبحث عن وبالتالي العودة فارغة.

يمكنك فقط نقل المكالمة إلى setContentView() من عند onCreate إلى onResume (بالنظر إلى أنك لا تشير إلى وجهات النظر في onCreate.للاستخدام العادي هذا لا فرق كما هو الحال في دورة حياة الروبوت, onResumeيسمى مباشرة بعد onCreate وقبل أن يتمكن المستخدم من التفاعل مع النشاط.

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

على الأرجح يحدث ذلك عندما

((Button)findViewById(R.id.speakEnglishButton));

يعود لاغية.يحدث هذا إذا تعذر العثور على مثل هذا المورد.تلقائيا سبب واحد يتبادر إلى ذهني:ليس لديك موارد افتراضية في التخطيط الخاص بك.هذا يعني:أنت يجب لديك تخطيط "افتراضي" واحد على الأقل ، والذي ينطبق على كل لغة/اتجاه/...والتي يجب وضعها في المجلد"نسق".ببساطة "تخطيط".

إذا كنت تبقي سيتكونتينتفيو () في أونريسوم () بدلا من أونكريت () ، وسوف تعطي تضخيم استثناء ، لقد حاولت هذا.

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