Android在ListView的onTouch事件中獲取選中項的值

SRQSQQ發表於2015-04-06

在Android開發中經常使用ListView,最近使用ListView製作一個仿QQ的滑動刪除控制元件時遇到一個問題,就是使用ListView的onTouch事件無法獲取選中項的值,講過一番思考和在網上看的一些資料,想到一個解決辦法。


        ListView listView = (ListView) findViewById(R.id.listView1);
        listView.setOnTouchListener(new OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO 自動生成的方法存根
				int position = ((ListView)v).pointToPosition((int)event.getX(), (int)event.getY());
				System.out.println(position);
				return false;
			}
		});


使用函式pointToPosition,引數是觸控ListView的橫縱座標。pointToPosition的詳情可檢視原始碼。


    /**
     * Maps a point to a position in the list.
     *
     * @param x X in local coordinate
     * @param y Y in local coordinate
     * @return The position of the item which contains the specified point, or
     *         {@link #INVALID_POSITION} if the point does not intersect an item.
     */
    public int pointToPosition(int x, int y) {
        Rect frame = mTouchFrame;
        if (frame == null) {
            mTouchFrame = new Rect();
            frame = mTouchFrame;
        }

        final int count = getChildCount();
        for (int i = count - 1; i >= 0; i--) {
            final View child = getChildAt(i);
            if (child.getVisibility() == View.VISIBLE) {
                child.getHitRect(frame);
                if (frame.contains(x, y)) {
                    return mFirstPosition + i;
                }
            }
        }
        return INVALID_POSITION;
    }


相關文章