在ListView中,有一个OnTouch()事件响应函数,现在需要在ACTION_DOWN时,获取当前选中的ListView Item的Position,不知能否实现? 我现在是直接用listView.getSelectedItemPosition()来获取当前选中的Item Position,但是返回-1,意味着在发生ACTION_DOWN时,Item还处于未选中状态,是这样吗?是否还有其他方法可以得到这个Position值。 注:不要所在Onclick事件中可以获取,这个是在ACTION_UP时才触发的,而我现在需要的是在ACTION_DOWN时就获取这个Position。 

解决方案 »

  1.   

    对你描述的不是很清楚,如果实在不行,可以使用一种比较笨的方法,就是将你的OnTouch()事件放在xxxAdapter里,在getView里,
    mViewHolder.close.setTag(position);
     mViewHolder.close.setOnTouchListener(this);  
      

  2.   

    getFirstVisiblePosition()  这个方法试试
      

  3.   

    打错了,有个是lst.getCheckedItemPosition(),你试试,我没用过
      

  4.   

      public int  getCheckedItemPosition  ()Returns the currently checked item. The result is only valid if the choice mode has not been set to CHOICE_MODE_SINGLE.
    你看看你的模式是不是CHOICE_MODE_SINGLE
      

  5.   


    这些都试试过了,都没用。Log.v(TAG, "SelectedItem = " + mListView.getSelectedItem());
    Log.v(TAG, "SelectedItemId = " + mListView.getSelectedItemId());
    Log.v(TAG, "Position1 = " + mListView.getCheckedItemPosition());
    Log.v(TAG, "Position2 = " + mListView.getSelectedItemPosition());
    返回:
    SelectedItem = null
    SelectedItemId = -9223372036854775808
    Position1 = -1
    Position2 = -1
      

  6.   


    mListView.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        
    int action = event.getAction();
    switch (action) {
    case MotionEvent.ACTION_DOWN:
    Log.d(TAG, "== ACTION_DOWN ==");
    ...
    Log.v(TAG, "SelectedItem = " + mListView.getSelectedItem());
         Log.v(TAG, "SelectedItemId = " + mListView.getSelectedItemId());
         Log.v(TAG, "Position1 = " + mListView.getCheckedItemPosition());
         Log.v(TAG, "Position2 = " + mListView.getSelectedItemPosition());
    break;
    case MotionEvent.ACTION_MOVE:
    Log.d(TAG, "== ACTION_MOVE ==");
    ...
    break;
    case MotionEvent.ACTION_UP:
    Log.d(TAG, "== ACTION_UP ==");
    ...
    break;
    }

    return false;
    }
    });
      

  7.   


    mListView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action) {
            case MotionEvent.ACTION_DOWN:
                Log.d(TAG, "== ACTION_DOWN ==");
                ...
                Log.v(TAG, "SelectedItem = " + mListView.getSelectedItem());
                    Log.v(TAG, "SelectedItemId = " + mListView.getSelectedItemId());
                    Log.v(TAG, "Position1 = " + mListView.getCheckedItemPosition());
                    Log.v(TAG, "Position2 = " + mListView.getSelectedItemPosition());
                break;
            case MotionEvent.ACTION_MOVE:
                Log.d(TAG, "== ACTION_MOVE ==");
                ...
                break;
            case MotionEvent.ACTION_UP:
                Log.d(TAG, "== ACTION_UP ==");
                ...
                break;
            }
            return false;
        }
    });
      

  8.   

    我用OnClick事件,有个参数arg2就是你要的
    但一直搞不明白,OnClick,跟OnTouch的差别
    建议你试下OnClick
      

  9.   

    不好意思,搞错了,是OnItemClick
      

  10.   

    楼主。我现在在写一个也要用到Ontouch 不过。我给一个TextView设置了 OnTouchListener 的监听。不过,只能监听到MotionEvent.ACTION_DOWN: 其它的监听不到。你有出现这种情况不?
      

  11.   

    晕。我知道了。原来需要return true才可以~