Android ListView - 在ListView.setOnTouchListener的列表中获取许多元素

时间:2012-03-14 07:39:20

标签: android listview ontouchlistener

我正在尝试获取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);

...

这似乎不正确,因为有时候我的位置错了。我该如何解决?

2 个答案:

答案 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中行的编号