java - 如何阻止多个意图按顺序打开?
问题描述
我有一个显示在一个 Java 活动中的发票列表,并且我可以单击其中一个发票以打开一个显示其详细信息的新活动(使用意图)。问题是,新活动不会立即打开,如果用户在加载之前多次点击发票,它们都会被加载到屏幕上,用户必须退出所有这些。
我试图摆弄以解决此问题,但我不知道从哪里开始,我正在寻找某种功能,可以阻止任何点击执行任何操作,直到第一个加载完成。我将在下面包含我的方法的代码。
final ListView listView = root.findViewById(R.id.invoices_list);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent showDetailedInvoice = new Intent(getActivity(), DetailedInvoiceActivity.class);
try {
Invoice invoice = new Invoice(invoices.getJSONObject(position));
showDetailedInvoice.putExtra("invoice", invoice);
showDetailedInvoice.putExtra("user", user);
startActivity(showDetailedInvoice);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
解决方案
你有一些方法:
1-在用户单击一次后禁用项目,因此在活动出现之前他不能单击另一个项目(因此只允许一个)
2- 按时间控制点击次数,例如每秒一次。您将需要保存用户上次点击的时间并将当前时间与该时间进行比较,并检查至少经过一秒钟。活动可能会在 1 秒前打开。为此,您可以使用 System.currentTimeInMillis(),因此您将拥有如下内容:
private Long lastTimeUserClicked = null;
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Long clickTime = System.currentTimeInMillis();
if(lastTimeUserclicked==null || clickTime - lasTimeUserClicked > 1000) { //1000 millisecs = 1 sec
//Do your stuff ...
lastTimeUserClicked = clickTime;
}
}
3-如果您打开的活动只有一个并且您更改了它的数据,您可以将意图设置为带有 Intent 标志的 SingleTop:
Intent showDetailedInvoice = new Intent(getActivity(), DetailedInvoiceActivity.class);
showDetailedInvoice.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
注意:不确定您之前是否需要透明顶部。如果它不适用于 SINGLE_TOP 只有你可以尝试在之前添加
showDetailedInvoice.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
推荐阅读
- python - 向现有的 .CSV/Parquet 文件添加新列,而不先加载整个文件并重新保存?
- julia - 使用多行 LaTeXString 注释 Julia 图
- apache - htaccess - js 和 css 用于缓存但不适用于 webp
- javascript - 执行嵌入命令时出错 discord js
- api - NPM 包 API:如何使用“@”查询包?
- python - 即使我是从 geeksforgeeks 关注的,为什么我的 opencv 错误
- php - 验证:存在两列相同的请求
- javascript - 如何根据烧瓶中下拉选择的值加载图像?
- powerbi - 如何将水晶报表中的嵌套if转换为powerbi分页报表
- import - 在 Jupyter 笔记本中导入 ktrain 时出现 TypeError