2014-06-16 2 views
2

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

Я использую это, чтобы позволить салфетки, чтобы удалить:

View.OnTouchListener mTouchListener = new View.OnTouchListener() 

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

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

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

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

+0

Использование onListItemClickListener() для объекта ListView. http://stackoverflow.com/questions/5716599/how-to-set-onlistitemclick-for-listview-in-android – Ryan

+0

use pointToPosition() – pskink

ответ

1

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

+0

Mhh, у меня есть пользовательский адаптер, thx для совета, i не создал OnTouchListener для каждого элемента, но я установил row.setId (position); в моем пользовательском адаптере, и я получаю его с view.getId() в моей единственной функции OnTouchListener. спасибо ! – deveLost

2

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

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

Также с помощью TouchListener вы можете использовать что-то похожее на код Roman Nurik, чтобы получить позицию по щелкнутому виду.

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); 
} 
Смежные вопросы