android-studio - 如何从 onLongClick() 重新运行循环?
问题描述
这是代码。如果一个视图被长按,我希望这个循环通过使 i = 0 重新运行。但是 setOnLongClickListener 之后的 if 语句只在开始时执行一次,而不是在长按视图之后执行。
final hasLongClicked[] = {false};
for(int i = 0; i < mLLayout.getChildCount(); i++){
// tried declaring hasLongClicked[] here but no avail
View child = mLLayout.getChildAt(i);
child.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick(View v) {
//Some stuff
hasLongClicked[0] = true;
return false;
}
});
if(hasLongClicked[0])
i = 0;
}
我该如何度过这个难关?另外,这是将OnLongClickListeners 设置为线性布局的所有子视图的好方法吗?
非常感谢您的帮助。谢谢
解决方案
我通过创建一个函数并在事件被处理时调用自己来解决它,如下所示:
private void discardEvents(LinearLayout mLLayout) {
for(int i = 0; i < mLLayout.getChildCount(); i++){
View child = mLLayout.getChildAt(i);
child.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick(View v) {
//Do your stuff
discardEvents(mLLayout);
return false;
}
});
}
}
虽然我想知道这是否会导致任何问题/隐藏错误。
推荐阅读
- typescript - [Typescript]:是否可以使用泛型 X 的键和泛型 X 的值创建类型安全的 Map?
- nginx - 未找到 nginx 404,但我在 access.log 中得到了点击。那为什么我看不到我的网站?
- flutter - 如何使用 Future 作为状态
- mongodb - MongoDb - 在“计算”字段上添加索引
- flutter - Flutter 在哪里处理 Firebase 动态链接?
- c++ - std::cout 与 printf;机器语言有什么不同吗?
- ms-access - 访问格式化十六进制最少四位
- php - 从主树php获取子树
- flutter - 如何导入依赖于 Flutter 平台的 Dart 文件或包?
- sql-server - Azure 中的数据质量服务