initializeScrollbars ist nicht definiert?

8

Hintergrund

Ich verwende diese Bibliothek , die für eine ihrer Klassen (die von ViewGroup), in "PLA_AbsListView.java", innerhalb des CTOR, gibt es diese Zeilen:

%Vor%

Vor kurzem habe ich das SDK & amp aktualisiert; ADT von Android zur Unterstützung der neuen Android Version (Lollipop - API21).

Das Problem

Seitdem ich alles aktualisiert habe, bekomme ich diesen Fehler:

  

Die Methode initializeScrollbars (TypedArray) ist für den Typ PLA_AbsListView

nicht definiert

Was ich versucht habe

Ich habe versucht, die API so einzustellen, dass sie unter 21 liegt, aber das hat nicht geholfen.

Ich habe auch versucht herauszufinden, wo diese Funktion deklariert ist. Es sollte eine geschützte Funktion in "View.java" sein, aber aus irgendeinem Grund kann ich es nicht in die Dokumentationen

Die Frage

Wie könnte es sein?

Wie kann ich es beheben?

Ist es möglich, dass es ein Fehler in der Dokumentation ist?

Es hat vorher geklappt, als Kitkat angesprochen wurde ...

    
android developer 19.10.2014, 08:32
quelle

2 Antworten

7

von View.java von android-21 Quellen:

%Vor%

Sie sehen es nicht, weil die Methode mit @removed versehen ist. initializeScrollbarsInternal() kann auch nicht verwendet werden, da es mit @hide annotiert ist. Wie aus dem Kommentar ist es nicht sicher, diese Methode zu verwenden, sollten Sie es unbedingt dem Autor der lib melden.

    
biegleux 19.10.2014, 09:04
quelle
7

Wie @biegleux in seiner Antwort erwähnt, ist initializeScrollbars() nun mit @removed im API 21 Quellcode versehen. Hier ist die Methodenquelle von API 21:

%Vor%

Basierend auf dem Kommentar in der Methode klingt es wie das Problem vor API 21, dass es nicht sicher war, ein TypedArray zu übergeben, aber jetzt verwendet es nicht mehr das übergebene TypedArray . So scheint es, dass dies mit @Deprecated anstelle von @removed kommentiert werden sollte und es sollte eine neue Version dieser Methode geben, die keinen Parameter benötigt, der aufgerufen werden kann, wenn wir die Bildlaufleisten aus einer benutzerdefinierten Ansicht initialisieren müssen, die programmgesteuert erstellt wird.

Bis dies behoben ist, gibt es zwei Möglichkeiten, das Problem zu umgehen:

1) Erweitern Sie Ihre benutzerdefinierte Ansicht von XML mit dem Attribut android:scrollbars . Dies ist die sicherste Methode und sollte mit allen früheren und zukünftigen Plattformversionen funktionieren. Zum Beispiel:

Erstellen Sie eine XML-Layoutdatei ( my_custom_view.xml ):

%Vor%

Erweitern Sie Ihre benutzerdefinierte Ansicht:

%Vor%

2) Verwenden Sie reflection, um initializeScrollbars() im Konstruktor Ihrer benutzerdefinierten Ansicht aufzurufen. Dies könnte in zukünftigen API-Versionen fehlschlagen, wenn die Methode initializeScrollbars() tatsächlich entfernt oder umbenannt wird. Zum Beispiel:

In Ihrer benutzerdefinierten Ansicht (z. B. MyCustomView.java ):

%Vor%     
ashughes 20.01.2015 01:51
quelle

Tags und Links