Существуют ли какие-либо рекомендации для значений кодов запросов в Android? - программирование
Подтвердить что ты не робот

Существуют ли какие-либо рекомендации для значений кодов запросов в Android?

Теперь я использую случайные числа для кодов запросов. Поэтому каждый раз, когда я добавляю новую активность для startActivityForResult, мне нужно проверить все другие подобные действия, чтобы избежать столкновений. Могут ли быть какие-либо методы определения ценностей, не подлежащих разметке по дизайну? Как вы думаете?

4b9b3361

Ответ 1

Если вам все еще нужно проверить результат активности и как визуально отполированные структуры, пожалуйста, проверьте этот метод.

Объявите внутренний класс внутри вашего класса активности:

class RequestCode {
    static final int IMPORT = 100;
    static final int WRITE_PERMISSION = 101;
}

Использовать код при запуске:

startActivityForResult(intent, RequestCode.IMPORT);

Проверьте результат:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RequestCode.IMPORT && resultCode == RESULT_OK) {
        //...
    }
}

Ответ 2

На самом деле вам не нужно проверять все ваши действия, и это не имеет большого значения, если у вас одинаковые значения в разных действиях.

Идея для кодов запросов заключается в том, что вы в своем действии X в onActivityResult() можете различать результаты различных запросов, которые вы начали с startActivityForResult().

Итак, если у вас есть 3 разных вызова startActivityForResult() в вашей деятельности, вам понадобятся 3 разных кода запроса, чтобы иметь возможность различать их в onActivityResult() - чтобы вы могли определить, к какому результату принадлежит начало. Но если у вас есть другое действие Y, в котором вы делаете что-то похожее, не имеет значения, когда коды запросов там же, что и в Activity X.

Ответ 3

Приращение числа гарантируется, что он будет беспорядочным (пока он не обернется). На самом деле не произойдет, если вы не используете их много.

Вы можете добавить класс в свой проект, который даст вам номер. Например

public class GlobalStuff {
    private static final AtomicInteger seed = new AtomicInteger();
    public static int getFreshInt() {
        return seed.incrementAndGet();
    }
}

Теперь в вашем коде, когда вам нужно использовать число вместо

public void doSomething() {
    startActivityForResult(intentA, 342);
}

сделайте это как

private static final int REQUEST_CODE = GlobalStuff.getFreshInt();
public void doSomething() {
    startActivityForResult(intentA, REQUEST_CODE);
}

и вы можете быть уверены, что не используете один и тот же номер дважды. По крайней мере, пока код работает в одном и том же Процессе.

Единственная проблема заключается в том, что вы не можете использовать эти числа в операторе switch (как в case REQUEST_CODE:), потому что коммутатору нужны номера, которые известны во время компиляции