Android在滚动列表时禁用单击列表视图项

时间:2015-03-03 06:30:13

标签: android onclicklistener ontouchlistener horizontallist

我有一个主要活动和一个适配器。 该活动包含一个在列表视图上定义的触摸侦听器。 适配器包含列表视图“项目”的onclick列表器。 当我滚动此列表时,它工作正常,但是在释放手指(这是ACTION_UP运动事件)时,我的列表项被单击,从而打开一个新活动(因为我已经对点击设置了意图)

如何在滚动列表时禁用项目点击?

3 个答案:

答案 0 :(得分:0)

您可以将滚动侦听器设置为列表视图,当它停止滚动时,将isScrolling标志设置为false。现在,当您执行项目单击时,只需要检查标志isScrolling即可完成。

请参阅下面的代码。希望它会有所帮助。谢谢

listview.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

            if (scrollState == SCROLL_STATE_IDLE) {
                isScrolling = false;
            }

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
           isScrolling = true;
        }
    });

    listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            if(!isScrolling){
                //start your activity
            }

        }
    });

答案 1 :(得分:0)

设置OnScrollListener

setOnScrollListener(new OnScrollListener() {
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        clickAvailable = false;
    }

    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
            clickAvailable = true;
        }
    }
});

...
//In OnClickListener
if(clickAvailable) {
//do your work
}
...

答案 2 :(得分:-1)

要触发click事件,请将代码(启动新活动)放入setOnItemClickListener

hlv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i = new Intent(Abc.this,Xyz.class);
            startActivity(i);
        }
    });

其中hlv是水平列表视图对象。然后滚动事件不会与点击事件混在一起。