Android在OnTouchListener()中获取位置列表视图

时间:2014-06-16 19:43:44

标签: android listview android-listview adapter

我是一个列表视图,用户可以在其中轻扫"从列表视图中删除项目。但我想有可能看到"细节"这个项目。我想在用户点击"在项目上。

我用它来允许滑动删除:

View.OnTouchListener mTouchListener = new View.OnTouchListener()

所以我在适配器上使用它:

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

在使用之前,我使用onItemClick来获取所选项目的位置。

但是如何在没有onItemClick函数的情况下获得POSITION?

2 个答案:

答案 0 :(得分:2)

要了解ArrayAdapter中的位置,您可以使用adapter.getPosition(view) http://developer.android.com/reference/android/widget/ArrayAdapter.html#getPosition(T)

您可以在适配器中使用带有onListItemClick的TouchListener来处理滑动操作和单击操作(例如打开详细信息)。

同样使用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);
 }

答案 1 :(得分:1)

1)您应为ListView创建custom Adapter 2)在此getView的{​​{1}}方法中,您应为每个项目AdapterLayout创建OnTouchListener