Обнаружение кликов по различным областям элементов галереи Android - PullRequest
2 голосов
/ 01 марта 2011

Эй, ребята, я занимался этим некоторое время, и я пока не нашел решения, которое бы работало на 100%.

Выпуск

У меня есть галерея Android, которая циклически перебирает элементы, каждый из которых состоит из ImageView (давайте назовем его «Миниатюра») и другого представления под ним с некоторым текстом и небольшим значком (назовем его «Заголовок»).

То, чего я хотел бы добиться, - это 2 различных действия в зависимости от того, где пользователь щелкает, и все это без нарушения способа перемещения галереи влево и вправо.

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

Вещи, которые я пробовал

Есть 2 подхода к проблеме, как я ее вижу:

Подход 1

Присоедините OnItemClickListener к элементу Gallery из основного представления, содержащего галерею, а затем присоедините OnClickListener к заголовку из адаптера Gallery.

Несмотря на то, что этот подход работает, кажется, что он не дает шевелиться галерее, если она захвачена и перетащена заголовком.

Поскольку onClick возвращает void, похоже, нет способа передать событие onClick для последующей обработки в onItemClick галереи.

Так как я хотел бы иметь возможность бросать, используя Название, этот подход не работает для меня, по крайней мере, в его текущей версии.

Подход 2

Второй подход заключается в том, чтобы иметь всю логику обнаружения в наборе галереи setOnItemClickListener.

Если бы был способ выяснить, был ли вид, на который щелкнули, это Миниатюра или Заголовок, все было бы очень просто, и бросок был бы целым.

Но я пока не могу понять, как это сделать.

g.setOnItemClickListener(new OnItemClickListener() {
  public void onItemClick(AdapterView parent, View v, int position, long id) {
    // TODO: figure out which view has been clicked on, but how?
  }
}

Поскольку я использую бесконечный адаптер с парадигмой ViewHolders, я попытался напечатать значения этих параметров:

Log.d("IDs", v.getId() + " " + ((ViewHolder) v.getTag()).thumbnail.getId() + " " + getSelectedItemId() + " " + parent.getId() + " " + parent.getItemIdAtPosition(0));

но все они были разными после нажатия, скажем, Thumbnail:

-1 2131230800 -9223372036854775808 2131230865 0

Итак, теперь я в тупике. Мудрое сообщество Android, можете ли вы мне помочь?

Спасибо.

1 Ответ

1 голос
/ 01 марта 2011

У меня есть решение для вас: SwipeView.Это мой проект с открытым исходным кодом, ознакомьтесь с последним источником на github (двоичные файлы на моем сайте немного устарели, и с тех пор было исправлено множество ошибок, связанных с тем, о чем вы говорите)

https://github.com/fry15/uk.co.jasonfry.android.tools

Здесь представлен демонстрационный проект: http://jasonfry.co.uk/?id=28

Наслаждайтесь!

...