Używałem klasy setId
z klasy View
. Według tej metodyObsługa adnotacji Android @IdRes
public void setId(@IdRes int id) // This will accept resource id
Kiedy próbowałem użyć tej metody z jakimś wbudowaną wartość int
(powiedzmy 100), to metoda zacząć rzucać poprawnego ostrzeżenie których się oczekuje
actionButton.setId(100);
Oczekiwany zasób typu id.
Ale kiedy przekonwertowałem tę zakodowaną wartość na metodę i nigdy nie zdefiniowałem, że ta metoda zwróci @IdRes
, Ostrzeżenie milknie.
private int getViewId() {
return 100;
}
Wywołanie metody, aby ustawić identyfikator.
actionButton.setId(getViewId());
Czy obie wersje nie są takie same. Zakodowane na sztywno int
i int
powrócić z tej metody. Dlaczego w jednym przypadku ostrzeżenie o metodzie rzucania, a w innym milczy.
Dla dobra spróbowałem z StringRes
, ale otrzymuję ostrzeżenie w obu przypadkach.
private void setMyString(@StringRes int resourceString) {}
Ostrzeżenie zarówno poniżej futerały-
setMyString(1);
setMyString(getStringId()); getStringId returns int value
Myślę, że adnotacja @IdRes wymusza użycie identyfikatora zasobu zamiast literału. Identyfikator zasobu może być przypisany do zmiennej – Inducesmile
Tak, zgadzam się @Inducesmile, ale w przypadku StringRes, nigdy nie generuje ostrzeżenia w obu przypadkach – Rahul
Czy używasz linek lub używasz wbudowanego analizatora przepływu danych w Android Studio (IntelliJ IDEA)? – laalto