首页 > 解决方案 > 如何阻止多个意图按顺序打开?

问题描述

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

标签: javaandroidandroid-fragmentsandroid-intentandroid-activity

解决方案


你有一些方法:

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)

推荐阅读