我正在尝试获取onTouch方法中的列表项目编号。我就是这样做的:
ListView myList;
...
myList.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
doSomething(myList, event);
return false;
}
});
...
private void doSomething(ListView myList, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
int first = myList.getFirstVisiblePosition();
int last = myList.getLastVisiblePosition();
int itemHeight = myList.getHeight() / (last - first + 1) + myList.getDividerHeight();
int position = (int)event.getY() / itemHeight;
View child = myList.getChildAt(position);
...
这似乎不正确,因为有时候我的位置错了。我该如何解决?
答案 0 :(得分:1)
为什么不为ListView项设置onTouchListener呢?
如果您正在为ListView使用自定义适配器,请在implement OnTouchListener
- 方法中对其进行setOnTouchListener(this)
并在ListView项目上设置getView(int position, View convertView, ViewGroup parent)
。
如果您正在尝试操作ListView项,那应该可以解决问题。
如果您只想尝试获得该职位,请在convertView.setOnTouchListener(new OnTouchListener() { ... read position and do something ... } );
中使用getView(...)
。
如果您只是想更改backgroundcolor / textcolor(imageview内容),可以使用statelist-drawables。
要更改onItemCLick上的textcolor,请参阅this question and answer并将您创建的drawable设置为TextView
的textColor。对于listitem的backgroundcolor,创建一个自定义列表选择器(more info, see this question)。您也可以用同样的方式更改ImageView
的内容:创建StateListDrawable并将其设置为ImageView
的来源。
答案 1 :(得分:0)
您应该使用AdapterView.OnItemClickListener并使用setOnItemClickListener(AdapterView.OnItemClickListener侦听器)方法进行设置。它有一个onItemClick(AdapterView父视图,View视图,int position,long id)方法,position变量将是listview中行的编号