更新ImageResource子后无法捕获ListView项MotionEvent操作

时间:2012-08-06 18:20:17

标签: android android-layout android-listview

我有一个自定义ListView,我用Adaptar填充。在我的应用程序中,列表中的项目将根据其状态进行更改,因此我正在更新我的ImageViews:

mStatusIcon = (ImageView) findViewById(R.id.imgStatusIcon);
mStatusIcon.setImageResource(R.drawable.icon_cancel);

到目前为止一切顺利。问题是我需要在布局的某个部分使用某种焦点/悬停状态。我在布局xml中的OnTouchListener()上设置了View mHitfield

我可以抓住所有相关的行动:ACTION_MOVEACTION_DOWNACTION_UPACTION_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;
    }
});

有人可以向我解释为什么会发生这种情况,以及是否有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

我仍然不确定它为什么会发生,但似乎TouchEvent被取消了,因为布局是在创建的自定义View中更新的。一旦我没有使用自定义视图但创建了XML布局,问题就不复存在了。