Как обрабатывать клики / прикосновения к повторяющимся пользовательским компонентам? - PullRequest
4 голосов
/ 12 июля 2011

Итак, у меня есть экран, на котором есть от 0 до 6 одинаковых компонентов пользовательского интерфейса, включенных через XML.Что-то похожее на это:

<TableRow android:layout_height="150px">

    <include android:id="@+id/p1" android:layout_width="fill_parent"
        android:layout_height="wrap_content" layout="@layout/numerics_component"
        android:onClick="onClick" />

</TableRow>

<TableRow android:layout_height="150px">

    <include android:id="@+id/p2" android:layout_width="fill_parent"
        android:layout_height="wrap_content" layout="@layout/numerics_component"
        android:layout_below="@id/p1" android:onClick="onClick" />


</TableRow>

... и т. Д.

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

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

public void onClick(View view) {

    Log.d(loggingName, "Got onClick event on view: " + view);

    // Identify the view, and handle appropriately:
    switch (view.getId()) {

    ...

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

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

Есть идеи, как мне это сделать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Вы можете искать в иерархии, чтобы выяснить, какой подкомпонент был нажат. Я вижу, что каждая строка вашей таблицы имеет уникальный идентификатор. Таким образом, даже если макет повторяется с одинаковыми идентификаторами, иерархия представления не имеет идентичных идентификаторов ни в одном поддереве.

Таким образом, чтобы определить, какой субкомпонент был нажат, получите идентификатор родительского представления (которое в вашем случае является строкой) и посмотрите, к какой из 6 строк принадлежит представление. Имеет ли это смысл?

1 голос
/ 12 июля 2011

1) Класс Android View позволяет пометить каждый экземпляр представления с помощью метода setTag .

Итак, просто setTag() для каждого представления с некоторым уникальным целым числомдаже, возможно, объект с методом, который вы будете вызывать.Затем в прослушивателе щелчков просто сделайте getTag(), чтобы провести различие между различными экземплярами представления.

2) Вы можете назначить уникальный onClickListener для каждого экземпляра представления.может сделать findViewById() для каждого экземпляра представления и сохранить их в переменных-членах, массиве или какой-либо другой структуре данных.Затем в onClickListener вы просто сравниваете ссылку View, переданную в onClick(), со списком сохраненных ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...