تجاوز Android onClick(View v) - هل يوجد حل جيد لاستخدامه لجميع الأزرار في التطبيق

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

سؤال

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

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

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

أحد الحلول بالطبع هو أنه يمكنك الحصول على معرف كل زر وإجراء تبديل (حالة) أو شيء ما، واعتمادًا على معرف الزر الذي تم إرجاعه، يمكنك القيام بشيء ما.المشكلة هي أن لدي 50 زرًا.ماذا لو كان لدي 200؟هل يجب عليّ حقًا إجراء 200 فحص حالة في بيان التبديل الخاص بي لمعرفة الإجراء الذي يجب علي اتخاذه؟

لذلك أحاول معرفة المعلومات المتاحة لي والتي لا أعلم أنه يمكنني استخدامها عند تجاوز onClick.

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    if(!getClickInfo()){
        ((CustomButton)v).setText("I clicked the button");
        setClickInfo(true);
    }
    else{
        isClicked = false;
        ((CustomButton)v).setText("This is the button that i want to click");


    }

}

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

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

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

المحلول

لست متأكدا من هدفك النهائي.ولكن من وجهة نظرك (زر) يمكنك الحصول على الوالدين (E.G. Relativelayout).ثم بمجرد أن يكون لديك مجموعة عرضك، يمكنك الحصول على أطفالها وتفعل ما تحتاج إليه.

على سبيل المثال: giveacodicetagpre.

إذا كنت لا تحتاج إلى معرفة ما إذا كان في الواقع relativelayout أو linearlayout، أو أيا كان مجرد استخدام fiewgroup.

آمل أن يساعد.

نصائح أخرى

إذا كنت أفهمك بشكل صحيح، فمن الممكن أن يكون لديك بعض ملحقات CustomButton المختلفة:يقول RelativeLayoutButton و LinearLayoutButton, واطلب منهم تنفيذ OnClickListener.تجاوز onClick() ضمن الفئة الموسعة، والتعامل مع التنفيذ لكل نوع زر.

يمكنك الوصول إلى التسلسل الهرمي للعرض بالكامل إذا لزم الأمر.قل شيئا من هذا القبيل:

//assuming a reference to Button button

//get a reference to the parent
View v = button.getParent();
ViewGroup parent;
ArrayList<View> siblings = new ArrayList<>();

if(v instanceof ViewGroup) parent = (ViewGroup) v;
for(int i = 0; i < parent.getChildCount(); i++) {
    siblings.add(parent.getChildAt(i));
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top