Android ListView - получение номера элемента в списке в ListView.setOnTouchListener - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь получить номер элемента списка в методе onTouch. Вот как я это делаю:

ListView myList;



...
myList.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    doSomething(myList, event);
                    return false;
                }
            });

...
private void doSomething(ListView myList, MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {                                         
        int first = myList.getFirstVisiblePosition();
        int last = myList.getLastVisiblePosition();
        int itemHeight = myList.getHeight() / (last - first + 1) + myList.getDividerHeight();
        int position = (int)event.getY() / itemHeight;
        View child = myList.getChildAt(position);

...

Кажется, это не правильно, потому что иногда я получаю неправильную позицию. Как я могу это исправить?

Ответы [ 2 ]

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

Почему бы вам не установить вместо них элемент onTouchListener для элементов ListView?

Если вы используете собственный адаптер для ListView, сделайте его implement OnTouchListener и установите setOnTouchListener(this) для элементов ListView в getView(int position, View convertView, ViewGroup parent) -методе.

Если вы пытаетесь манипулировать элементами ListView, это должно сработать.

Если вы просто пытаетесь получить позицию, используйте convertView.setOnTouchListener(new OnTouchListener() { ... read position and do something ... } ); в getView(...).

Обновление

Если вы просто пытаетесь изменить backgroundcolor / textcolor (содержимое просмотра изображений), вы можете использовать statelist-drawables.

Чтобы изменить цвет текста наItemCLick, см. этот вопрос и ответ и задайте чертеж, который вы создали, как textColor для вашего TextView. Для цвета фона listitem создайте пользовательский список выбора ( больше информации, см. Этот вопрос ). Вы также можете изменить содержимое ImageView таким же образом: создайте StateListDrawable и установите его в качестве источника ImageView.

0 голосов
/ 14 марта 2012

Вы должны использовать AdapterView.OnItemClickListener и установить его с помощью метода setOnItemClickListener (AdapterView.OnItemClickListener listener). Он имеет метод onItemClick (родительский объект AdapterView, представление View, int position, long id), а переменная position будет номером строки в просмотре списка

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