Галерея / AdapterView Дочернее рисованное состояние - PullRequest
7 голосов
/ 04 октября 2010

Я использую представление Галереи, где представление, соответствующее каждому элементу, нетривиально и состоит из текста, а также нескольких кнопок.

Когда я нажимаю, чтобы перетащить вид галереи (где-то не на одну из кнопок), состояние рисования кнопки меняется на нажатое и появляется, как будто все кнопки в данный момент нажаты. Кроме того, такое же поведение происходит для выбранного состояния (например, весь текст дочерних TextViews меняет цвет).

Я пытаюсь предотвратить такое поведение и обнаружил xml-атрибут android: duplicateParentState, а также свойство setDuplicateParentStateEnabled. Похоже, что это должно выполнить то, что я пытаюсь сделать, но, похоже, это не имеет никакого эффекта.

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 27 января 2011

Возможно, немного запоздалая сторона, но недавно я сам столкнулся с этой проблемой.

dispatchSetSelected и dispatchSetPressed здесь не очень помогают, так как методы, которые вам нужно переопределить, являются приватнымив пределах Gallery.

Решение состоит в том, чтобы добавить дополнительный макет (я использовал подкласс LinearLayout) вокруг дочернего представления, который переопределяет setPressed (boolean) и просто игнорирует его.Это препятствует тому, чтобы галерея навязывала свое нажатое состояние дочерним элементам, в то же время позволяя тем самым дочерним элементам быть активированными непосредственно, и не мешая событиям распространяться вверх.

3 голосов
/ 05 октября 2010

Не уверен, где вступает в действие свойство duplicateParentState, но прорыв источника показывает, что он никогда не учитывается для выбранных и нажатых состояний.Я хотел бы создать собственный класс представления и переопределить методы dispatchSetSelected и dispatchSetPressed.

1 голос
/ 23 марта 2012

Если вам случится выйти из Галереи, чтобы создать свою собственную версию, вы можете просто сделать:

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

Это все равно позволит дочерним элементам пользовательской галереи правильно получать события щелчков и проводить /кидание работает как задумано.

...