Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何阻止多个意图按顺序打开?_Java_Android_Android Fragments_Android Intent_Android Activity - Fatal编程技术网

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

我在一个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();
                }
            }
        });
    }
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)