当前位置:编程学习 > wap >>

Android/ListView:如何在OnTouch() - ACTION_DOWN时获取Selected List Item的Position

在ListView中,有一个OnTouch()事件响应函数,现在需要在ACTION_DOWN时,获取当前选中的ListView Item的Position,不知能否实现? 

我现在是直接用listView.getSelectedItemPosition()来获取当前选中的Item Position,但是返回-1,意味着在发生ACTION_DOWN时,Item还处于未选中状态,是这样吗?是否还有其他方法可以得到这个Position值。 

注:不要所在Onclick事件中可以获取,这个是在ACTION_UP时才触发的,而我现在需要的是在ACTION_DOWN时就获取这个Position。 
--------------------编程问答-------------------- 对你描述的不是很清楚,如果实在不行,可以使用一种比较笨的方法,就是将你的OnTouch()事件放在xxxAdapter里,在getView里,
mViewHolder.close.setTag(position);
 mViewHolder.close.setOnTouchListener(this);   --------------------编程问答-------------------- getFirstVisiblePosition()  这个方法试试 --------------------编程问答-------------------- 打错了,有个是lst.getCheckedItemPosition(),你试试,我没用过 --------------------编程问答--------------------   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 --------------------编程问答--------------------
引用 3 楼 anelka1985 的回复:
打错了,有个是lst.getCheckedItemPosition(),你试试,我没用过


这些都试试过了,都没用。

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 楼 yongyuandeni 的回复:
代码贴出来吧,比较容易看


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;
}
});

--------------------编程问答--------------------

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;
    }
});
--------------------编程问答-------------------- 我用OnClick事件,有个参数arg2就是你要的
但一直搞不明白,OnClick,跟OnTouch的差别
建议你试下OnClick --------------------编程问答-------------------- 不好意思,搞错了,是OnItemClick --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主。我现在在写一个也要用到Ontouch 不过。我给一个TextView设置了 OnTouchListener 的监听。不过,只能监听到MotionEvent.ACTION_DOWN: 其它的监听不到。你有出现这种情况不? --------------------编程问答-------------------- 晕。我知道了。原来需要return true才可以~ --------------------编程问答--------------------
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,