Android ListView onItemClick和DelayedConfirmationView onTimerSelected通过相同的单击触发

Android ListView onItemClick和DelayedConfirmationView onTimerSelected通过相同的单击触发,android,android-layout,listview,wear-os,Android,Android Layout,Listview,Wear Os,我做了一次搜索,但真的不知道要找什么。如果这是个愚蠢的问题,我很抱歉。我是android编程新手,我正在尝试制作一款带有listview的可穿戴应用程序。当用户单击一个项目时,它应该显示一个延迟确认视图,允许用户取消选择。我有一个包含两个视图的活动,一个是ListView,一个是DelayedConfirmationView 单击列表项时,计时器将启动,并显示delayedConfirmationView @Override public void onItemClick(AdapterView

我做了一次搜索,但真的不知道要找什么。如果这是个愚蠢的问题,我很抱歉。我是android编程新手,我正在尝试制作一款带有listview的可穿戴应用程序。当用户单击一个项目时,它应该显示一个延迟确认视图,允许用户取消选择。我有一个包含两个视图的活动,一个是ListView,一个是DelayedConfirmationView

单击列表项时,计时器将启动,并显示delayedConfirmationView

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

    // Two seconds to cancel the action
    mDelayedView.setTotalTimeMs(2000);
    // Start the timer
    mDelayedView.start();
}
如果按下取消按钮,我将切换回listview,以便用户可以修改其选择:

@Override
public void onTimerSelected(View view) {
    // cancel selected, so go back to listview
    setListViewVisible(true);
}
我遇到的问题是,当我点击cancel按钮时,它也会触发listview的侦听器,因此它会立即传输回延迟确认视图

我觉得答案应该很简单,但奇怪的是,相同的点击同时触发了onTimerSelected和onItemClick

编辑: 我尝试在切换视图之前添加一个延迟,看看视图转换是否太快,然后按下按钮

以下是添加延迟之前的日志:

D/Add活动:onCreate()
D/Add活动:setListViewVisible(真)
D/ADD爬升活动:onItemClick
D/Add活动:setListViewVisible(false)

D/addclimpactivity:onTimerSelected我最后不得不添加两个东西才能让它工作。我不得不延迟视图切换(请参阅我文章中的编辑),并将延迟确认视图侦听器设置为null,以便不会调用onTimerFinished。这似乎很奇怪,android在默认情况下选择计时器时不会取消计时器,但也许有一个让用户在不停止计时器的情况下按下按钮的用例

总之,我的代码是这样的:

@Override
public void onTimerSelected(View view) {
    Log.d(TAG, "onTimerSelected");

    mDelayedView.setPressed(true);

    // Prevent onTimerFinished from being heard.
    mDelayedView.setListener(null);

    // cancel selected, so go back to listview
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            setListViewVisible(true);
        }
    }, 50);
}

我最后不得不加上两件事才能让它起作用。我不得不延迟视图切换(请参阅我文章中的编辑),并将延迟确认视图侦听器设置为null,以便不会调用onTimerFinished。这似乎很奇怪,android在默认情况下选择计时器时不会取消计时器,但也许有一个让用户在不停止计时器的情况下按下按钮的用例

总之,我的代码是这样的:

@Override
public void onTimerSelected(View view) {
    Log.d(TAG, "onTimerSelected");

    mDelayedView.setPressed(true);

    // Prevent onTimerFinished from being heard.
    mDelayedView.setListener(null);

    // cancel selected, so go back to listview
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            setListViewVisible(true);
        }
    }, 50);
}

如果要在元素中单击多个视图,请在适配器中执行单击事件,而不是使用onItemClickListenerlistview@vikramthakur不知道你的意思。我在listview的每个元素中只有一个视图,我使用简单的列表项1和一个文本视图。请检查是否将
onItemClick
be called is you comment
setListViewVisible(true)
onTimerSelected
回调中?谢谢。你的取消按钮在哪里?尝试一件事,在cancel button click事件中,在延迟后切换listview的可见性,以检查是否正在使用cancel单击listview项我尝试添加延迟,但没有解决问题。它确实阻止了onItemClick被调用,但现在onTimerSelected和onTimerFinished都被调用。请参阅在post中编辑。如果要在元素中单击多个视图,请在适配器中执行单击事件,而不是使用onItemClickListenerlistview@vikramthakur不知道你的意思。我在listview的每个元素中只有一个视图,我使用简单的列表项1和一个文本视图。请检查是否将
onItemClick
be called is you comment
setListViewVisible(true)
onTimerSelected
回调中?谢谢。你的取消按钮在哪里?尝试一件事,在cancel button click事件中,在延迟后切换listview的可见性,以检查是否正在使用cancel单击listview项我尝试添加延迟,但没有解决问题。它确实阻止了onItemClick被调用,但现在onTimerSelected和onTimerFinished都被调用。请参阅在文章中编辑。
@Override
public void onTimerSelected(View view) {
    Log.d(TAG, "onTimerSelected");

    mDelayedView.setPressed(true);

    // Prevent onTimerFinished from being heard.
    mDelayedView.setListener(null);

    // cancel selected, so go back to listview
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            setListViewVisible(true);
        }
    }, 50);
}