Как остановить последовательное открытие нескольких намерений? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть список счетов-фактур, отображаемых в одном действии 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 Ответ

0 голосов
/ 11 ноября 2019

У вас есть несколько подходов:

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- Если открываемое вами действие является только одним, и вы изменяете его данные, вы можете установить намерениебыть SingleTop с флагами намерений:

Intent showDetailedInvoice = new Intent(getActivity(), DetailedInvoiceActivity.class);

showDetailedInvoice.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)

ПРИМЕЧАНИЕ: не уверены, что вам понадобится очистить верхнюю часть раньше. Если он не работает только с SINGLE_TOP, попробуйте добавить также до

showDetailedInvoice.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...