最后一个ListItem总是收到ontouch事件

时间:2013-10-11 07:40:32

标签: android android-listview

我的应用中有自定义列表视图。每个列表项左侧都有一个图标,右侧有一些文本。 我想在点击图标时显示一些动画。我使用了ontouch侦听器,当MotionEvent.ACTION_DOWN事件和MotionEvent.ACTION_UP事件发生一些其他操作时动画开始。

问题在于,当我点击列表视图中的特定项目时,图标会为该特定项目以及列表视图中的最后一项进行动画处理..每次都不确定问题是什么。请帮助。

代码的相关部分粘贴在下面:

public class Accounts implements OnItemClickListener, OnClickListener, AnimationListener{

Animation animation1;
ImageButton folderBTN;

//oncreate method
    animation1 = AnimationUtils.loadAnimation(this, R.anim.to_middle);
    animation1.setAnimationListener(this);



    //Adapter getview method
    ..
    .
    .
    .
    getView(){

        folderBTN.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    folderBTN.clearAnimation();
                    folderBTN.setAnimation(animation1);
                    folderBTN.startAnimation(animation1);
                    isIconShowing=true;

                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    FolderList.actionHandleAccount(Accounts.this,
                            (Account) account);
                }
                return false;
        }

    }


}

2 个答案:

答案 0 :(得分:1)

您的问题是您正在重用相同的动画实例,尝试在onTouch方法中声明动画实例。请尝试以下代码段。

 public class Accounts implements OnItemClickListener, OnClickListener, AnimationListener{


    ImageButton folderBTN;

    //oncreate method


        //Adapter getview method
        ..
        .
        .
        .
        getView(){

            folderBTN.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {

                            Animation animation;
                            animation = AnimationUtils.loadAnimation(this, R.anim.to_middle);
                            animation.setAnimationListener(Accounts.this);


                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        folderBTN.clearAnimation();
                        folderBTN.setAnimation(animation);
                        folderBTN.startAnimation(animation);
                        isIconShowing=true;

                    } else if (event.getAction() == MotionEvent.ACTION_UP) {
                        FolderList.actionHandleAccount(Accounts.this,
                                (Account) account);
                    }
                    return false;
            }

        }


    }

答案 1 :(得分:0)

我终于明白了。上面代码中的imagebutton folderbtn包含对生成的最后一个视图的引用。使用不同的变量为我解决了问题。这是代码,以防有人可能需要它。

public boolean onTouch(View v, MotionEvent event) {

                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        toAnimateBTN=(ImageButton) v.findViewById(R.id.folders);
                        toAnimateBTN.clearAnimation();
                        toAnimateBTN.setAnimation(animation2);
                        toAnimateBTN.startAnimation(animation2);
                    }