【发布时间】:2014-02-10 20:27:55
【问题描述】:
有没有办法防止在 Android 中双击 ListView?当我不小心点击ListView 上的项目时,我发现了这个,它打开了两个新窗口。有什么办法可以防止它打开同一个窗口两次。
【问题讨论】:
-
您能提供您的代码示例或图像吗?通常事情会很快处理,这会阻止这种行为。
标签: android android-listview android-gesture
有没有办法防止在 Android 中双击 ListView?当我不小心点击ListView 上的项目时,我发现了这个,它打开了两个新窗口。有什么办法可以防止它打开同一个窗口两次。
【问题讨论】:
标签: android android-listview android-gesture
只需在列表视图的选择上添加listView.setEnabled(false);,然后在选择何时响应或返回按钮后按下即可写----listView.setEnabled(true);
【讨论】:
您应该将目标活动(单击项目时打开的活动)限制为在任何时间点只有一个实例。
回答this SO question 应该可以帮助您实现这一目标。这样,如果您不小心双击,您仍然只会看到一个新屏幕。
【讨论】:
尝试引入和重写 isEnabled 方法
@Override
public boolean isEnabled(int position) {
return false;
}
对于列表视图。
为 flag 引入一个布尔值和一个 int 来保持上次点击的位置
int recentlyClickedPoisition;
boolean flagRecentClickedPoisition;
如下重写 isEnabled 方法
@Override
public boolean isEnabled(int position) {
if (flagRecentClickedPoisition && recentlyClickedPoisition == position) {
return false;
} else {
return true;
}
}
比从你的点击监听器中设置最后点击的位置如下
public void setLastClickedPoisition(int recentlyClickedPoisition) {
flagRecentClickedPoisition = true;
this.recentlyClickedPoisition = recentlyClickedPoisition;
}
希望这对你有用,以防止双击,相应地增强。
【讨论】:
如果您只在列表中使用像 TextView 这样的单个项目,那么只需在此调用中创建一个实现 OnItemClickListener 的类,然后在 onItemClick() 方法中初始化 myListView。setOnItemClickListenet(null); 然后使用 Handler.postDelayed 方法再次设置 onItemClickListener。 喜欢
myListView.setOnItemClickListener(new MyClickListenerClass());
这对我来说一直有效。
【讨论】:
在您的 XAML 视图页面中,将 isEnable 属性设置为可绑定和双向模式。
<ListView ItemsSource="{Binding items}"
x:Name="listview"
HasUnevenRows="True"
IsEnabled="{Binding IsEnable, Mode=TwoWay}"
RowHeight="10"
SelectionMode="Single"
VerticalScrollBarVisibility="Never">
在您的 xaml 页面的视图模型中:
private bool _isEnable = true;
public bool IsEnable
{
get => _isEnable;
set
{
_isEnable = value; OnPropertyChanged(nameof(IsEnable));
}
}
public ICommand TapCommand => new Command<//Model>(async (obj) =>
{
IsEnable = false;
//your stuff
IsEnable = true;
});
【讨论】:
我有两个窗格布局,一个控制详细视图的列表视图。首先我认为延迟处理程序是最糟糕的想法,但经过测试它是最简单的。否则,一旦加载了另一个详细信息,我将不得不在活动和片段之间进行通信以启用列表视图项。容易出错且复杂。
/*example with Handler():*/
final boolean[] allowClick = {true};
myview.setOnClickListener(v -> {
//exit if not allowed
if(!allowClick[0])
return;
//do stuff
//we clicked, block another click
allowClick[0] =false;
//wait 0.7 seconds and allow another click
new Handler().postDelayed(() -> allowClick[0] =true, 700);
});
【讨论】: