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 --------------------编程问答--------------------
这些都试试过了,都没用。
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
--------------------编程问答-------------------- 代码贴出来吧,比较容易看 --------------------编程问答--------------------
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就是你要的
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,跟OnTouch的差别
建议你试下OnClick --------------------编程问答-------------------- 不好意思,搞错了,是OnItemClick --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主。我现在在写一个也要用到Ontouch 不过。我给一个TextView设置了 OnTouchListener 的监听。不过,只能监听到MotionEvent.ACTION_DOWN: 其它的监听不到。你有出现这种情况不? --------------------编程问答-------------------- 晕。我知道了。原来需要return true才可以~ --------------------编程问答--------------------
补充:移动开发 , Android