Android ListView onItemClick和DelayedConfirmationView onTimerSelected通过相同的单击触发
我做了一次搜索,但真的不知道要找什么。如果这是个愚蠢的问题,我很抱歉。我是android编程新手,我正在尝试制作一款带有listview的可穿戴应用程序。当用户单击一个项目时,它应该显示一个延迟确认视图,允许用户取消选择。我有一个包含两个视图的活动,一个是ListView,一个是DelayedConfirmationView 单击列表项时,计时器将启动,并显示delayedConfirmationViewAndroid 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
@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 commentsetListViewVisible(true)代码>在onTimerSelected
回调中?谢谢。你的取消按钮在哪里?尝试一件事,在cancel button click事件中,在延迟后切换listview的可见性,以检查是否正在使用cancel单击listview项我尝试添加延迟,但没有解决问题。它确实阻止了onItemClick被调用,但现在onTimerSelected和onTimerFinished都被调用。请参阅在post中编辑。如果要在元素中单击多个视图,请在适配器中执行单击事件,而不是使用onItemClickListenerlistview@vikramthakur不知道你的意思。我在listview的每个元素中只有一个视图,我使用简单的列表项1和一个文本视图。请检查是否将onItemClick
be called is you commentsetListViewVisible(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);
}