سؤال

أنا أستخدم عرض معرض حيث تكون العرض المقابل لكل عنصر غير تافهة ويتكون من نص وكذلك أزرار متعددة.

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

أحاول منع هذا السلوك ووجدت سمة Android: DiPlicateParentState XML بالإضافة إلى خاصية setDuplicateParentStateenabled. يبدو أن هذا يجب أن يحقق ما أحاول القيام به ، لكن يبدو أنه ليس له أي تأثير.

أيه أفكار؟

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

المحلول 2

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

نصائح أخرى

ربما قليلاً في الجانب المتأخر ، ولكن بعد أن واجهت هذه المشكلة بنفسي مؤخرًا ، لدي حل.

لا تساعد DispatchSetsected و DispatchSetpressed حقًا هنا ، لأن الأساليب التي تحتاجها فعليًا للتغلب عليها تكون خاصة داخل المعرض.

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

إذا كنت تمتد من المعرض لإنشاء الإصدار المخصص الخاص بك ، يمكنك ببساطة القيام به:

  @Override
  public boolean onDown(MotionEvent e) {
    // Ignore onDown events in order to avoid having every child's state set to 'pressed'
    return true;
  }

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

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