我已经设置了一个具有 TextView 的 GridView,我想在触摸时更改 TextView 的背景,然后在释放时重置背景。 GridView 已经具有 OnItemClick 和 OnItemLongClick 监听器。我通过为 GridView 设置 OnTouch 监听器来实现触摸 TextView 的背景交换,然后获取触摸的位置并使用 getChildAt 来获取触摸的 TextView 。这非常有效,直到我滚动 GridView 。由于 TextView 被重用,getChildAt
返回错误的 TextView ,因此我在这种情况下更改了错误 TextView 的背景。
如何才能始终获得正确的 TextView ,或者有没有办法为每个 TextView 设置 OnTouch 监听器,而不是在触摸 GridView 后尝试获取 TextView ?
gridView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float currentXPosition = event.getX();
float currentYPosition = event.getY();
int position = gridView.pointToPosition((int) currentXPosition, (int) currentYPosition);
if (gridView.getChildAt(position) != null) {
TextView txtView = (TextView)gridView.getChildAt(position);
//might not be the right text view!
...
最佳答案
您可以使用getFirstVisiblePosition
检索第一个子项的偏移量
int firstPosition = gridView.getFirstVisiblePosition();
int childPosition = position - firstPosition;
TextView txtView = (TextView)gridView.getChildAt(childPosition);
这应该给你正确的位置。当然,你应该检查是否childPosition
实际上是一个有效的位置(即不是 <0
或 >=gridView.getChildCount()
)
关于android - getChildAt 在 GridView 中返回错误的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962965/