Android получить список позиций в OnTouchListener ()

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

Я использую это, чтобы разрешить удаление смахивания:

View.OnTouchListener mTouchListener = new View.OnTouchListener()

И вот я использую его с адаптером:

    mAdapter = new TestAdapter(getActivity(),
            R.layout.layout_test, list, mTouchListener);
    listV.setAdapter(mAdapter);

Прежде чем использовать это, я использовал onItemClick, чтобы получить позицию выбранного элемента.

Но как я могу получить ПОЗИЦИЮ без функции onItemClick?


person deveLost    schedule 16.06.2014    source источник
comment
Используйте onListItemClickListener () для объекта ListView. stackoverflow.com/ вопросы / 5716599 /   -  person Ryhan    schedule 16.06.2014
comment
используйте pointToPosition ()   -  person pskink    schedule 17.06.2014


Ответы (2)


Чтобы узнать позицию в ArrayAdapter, вы можете использовать adapter.getPosition(view) http://developer.android.com/reference/android/widget/ArrayAdapter.html#getPosition%28T%29.

Вы можете использовать TouchListener с onListItemClick в своем адаптере для обработки действия смахивания и действия щелчка (например, для открытия детали).

Также, используя TouchListener, вы можете использовать что-то похожее на код Романа Нурика для получения позиции по нажатому виду.

https://github.com/romannurik/Android-SwipeToDismiss/blob/master/src/com/example/android/swipedismiss/SwipeDismissListViewTouchListener.java

// Find the child view that was touched (perform a hit test)
Rect rect = new Rect();
int childCount = mListView.getChildCount();
int[] listViewCoords = new int[2];
mListView.getLocationOnScreen(listViewCoords);
int x = (int) motionEvent.getRawX() - listViewCoords[0];
int y = (int) motionEvent.getRawY() - listViewCoords[1];
View child;
for (int i = 0; i < childCount; i++) {
    child = mListView.getChildAt(i);
    child.getHitRect(rect);
    if (rect.contains(x, y)) {
         mDownView = child;
         break;
    }
}

if (mDownView != null) {
    mDownX = motionEvent.getRawX();
    mDownY = motionEvent.getRawY();
    mDownPosition = mListView.getPositionForView(mDownView);
 }
person Gabriele Mariotti    schedule 16.06.2014

1) Вы должны создать свой пользовательский Adapter для ListView.
2) В getView методе этого Adapter вы должны создать OnTouchListener для каждого элемента (Layout или rootView).

person Volodymyr Kulyk    schedule 16.06.2014
comment
Ммм, у меня есть специальный адаптер, спасибо за совет, я не создавал OnTouchListener для каждого элемента, но я установил row.setId (position); в моем настраиваемом адаптере, и я получаю его с помощью view.getId () в моей единственной функции OnTouchListener. Спасибо ! - person deveLost; 17.06.2014