Java 如何阻止多个意图按顺序打开?
我在一个Java活动中显示了一个发票列表,并且我可以单击其中一个发票打开一个显示其详细信息的新活动(使用意图)。问题是,新活动不会立即打开,如果用户在加载发票之前多次单击发票,则所有发票都会加载到屏幕上,用户必须退出所有发票 我已经尝试过试图解决这个问题,但我不知道从哪里开始,我正在寻找某种功能,可以阻止任何点击做任何事情,直到第一次加载。我将在下面包含我的方法的代码Java 如何阻止多个意图按顺序打开?,java,android,android-fragments,android-intent,android-activity,Java,Android,Android Fragments,Android Intent,Android Activity,我在一个Java活动中显示了一个发票列表,并且我可以单击其中一个发票打开一个显示其详细信息的新活动(使用意图)。问题是,新活动不会立即打开,如果用户在加载发票之前多次单击发票,则所有发票都会加载到屏幕上,用户必须退出所有发票 我已经尝试过试图解决这个问题,但我不知道从哪里开始,我正在寻找某种功能,可以阻止任何点击做任何事情,直到第一次加载。我将在下面包含我的方法的代码 final ListView listView = root.findViewById(R.id.invoice
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();
}
}
});
}
final ListView ListView=root.findviewbyd(R.id.invoices\u列表);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Intent showDetailedInvoice=新意图(getActivity(),DetailedInvoiceActivity.class);
试一试{
发票=新发票(invoices.getJSONObject(position));
showDetailedInvoice.putExtra(“发票”,发票);
showDetailedInvoice.putExtra(“用户”,用户);
startActivity(显示在声音中);
}捕获(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;
}
}
注意:不确定您是否需要在安装前清除顶部。如果单_-TOP不起作用,则只能尝试在之前添加
showDetailedInvoice.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
listView.setOnItemClickListener(空)代码>我建议采取措施,通过延迟查询(如果它们出于任何原因对UI线程造成了压力)和昂贵的布局(如果您有),使活动立即打开。在任何情况下,都应该能够使其具有足够的响应能力,以降低多次单击的风险。此外,您还可以将活动标记为singleTask,以使其作为singleton工作:
showDetailedInvoice.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)