我有一个自定义ListView,我用Adaptar填充。在我的应用程序中,列表中的项目将根据其状态进行更改,因此我正在更新我的ImageViews:
mStatusIcon = (ImageView) findViewById(R.id.imgStatusIcon);
mStatusIcon.setImageResource(R.drawable.icon_cancel);
到目前为止一切顺利。问题是我需要在布局的某个部分使用某种焦点/悬停状态。我在布局xml中的OnTouchListener()
上设置了View mHitfield
。
我可以抓住所有相关的行动:ACTION_MOVE
,ACTION_DOWN
,ACTION_UP
和ACTION_CANCEL
。
问题在于,当我更改ImageView mStatusIcon
时,我抓住的下一个操作始终为ACTION_CANCEL
。
View mHitfield = (View) findViewById(R.id.outerShape);
mHitfield.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
int currentAction = event.getAction();
switch(currentAction)
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
// if I comment out these lines I keep receiving all actions
// if I don't, I only receive ACTION_DOWN followed by ACTION_CANCEL
mStatusIcon.setImageResource(R.drawable.icon_download_normal);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// if I comment out these lines I keep receiving all actions
// if I don't, I only receive ACTION_DOWN followed by ACTION_CANCEL
mStatusIcon.setImageResource(R.drawable.icon_download_hover);
break;
}
return false;
}
});
有人可以向我解释为什么会发生这种情况,以及是否有办法解决这个问题?
答案 0 :(得分:0)
我仍然不确定它为什么会发生,但似乎TouchEvent被取消了,因为布局是在创建的自定义View中更新的。一旦我没有使用自定义视图但创建了XML布局,问题就不复存在了。