gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:06:37 24 4
gpt4 key购买 nike

我试图在 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);

...

好像不太对,因为有时我会弄错位置。我该如何解决?

最佳答案

为什么不为 ListView 项目设置一个 onTouchListener?

如果您为 ListView 使用自定义适配器,请使其实现 OnTouchListener 并在 getView( int position, View convertView, ViewGroup parent)-方法。

如果您正在尝试操纵 ListView 项目,那应该可以解决问题。

如果您只是想获取位置,请在 getView 中使用 convertView.setOnTouchListener(new OnTouchListener() { ... 读取位置并执行某些操作 ... } ); (...)

更新

如果你只是想改变背景颜色/文本颜色( ImageView 内容),你可以使用 statelist-drawables。

要在 ItemCLick 上更改文本颜色,请参阅 this question and answer并将您创建的可绘制对象设置为 TextView 的 textColor。对于列表项的背景色,创建自定义列表选择器 ( more info, see this question )。您还可以用相同的方式更改 ImageView 的内容:创建一个 StateListDrawable 并将其设置为 ImageView 的源。

关于Android ListView - 在ListView.setOnTouchListener中获取列表中的多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9697679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com