Nach dem SDK-Update (23) bekomme ich diesen Flusenfehler, ich habe keine Änderung in meinem Code vorgenommen und es funktionierte Gut bei Geräten mit API-Level 9. Außerdem rufe ich in meinem Code überhaupt nicht android.app.Activity # onCreateView auf. Wenn ich auf die automatische Korrektur klicke, wird @SuppressLint ("NewApi") auf die Deklaration der Klasse @SuppressLint("NewApi") public class MyActivity extends android.support.v4.app.FragmentActivity
gesetzt und der Fehler verschwindet. Ich möchte sicher sein, dass dies der richtige Weg ist.Aufruf erfordert API-Ebene 11 (aktuelle min ist 9) android.app.Activity # onCreateView
Antwort
Ich stieß auf das gleiche Problem.
Wenn Sie einen Blick auf die javadoc für die Aktivitätsklasse nehmen (http://developer.android.com/reference/android/app/Activity.html#onCreateView%28android.view.View,%20java.lang.String,%20android.content.Context,%20android.util.AttributeSet%29), sehen Sie, dass die Methode öffentlichen Ansicht onCreateView (Ebene, String name, Context Kontext AttributeSet attrs) wurde in API 11 hinzugefügt .
Anstatt @SuppressLint ("NewApi") auf der Ebene der Klassendeklaration zu verwenden, habe ich diese Methode zu meinem Code hinzugefügt und die Flusenwarnung für die Methodendeklaration unterdrückt. Wie so:
@SuppressLint("NewApi")
public View onCreateView(View parent, String name, Context context, AttributeSet attrs)
{
if(Build.VERSION.SDK_INT >= 11)
return super.onCreateView(parent, name, context, attrs);
return null;
}
diese Weise künftige Erweiterungen der Code der Klasse wird noch durch Flusen geprüft, aber Flusen mit einem Fehler das Markieren von dieser Methode stoppen.
ETA: Javadoc für Klasse gibt an, dass beide Methoden onCreateView (...) null als Standardverhalten zurückgeben und dass die Methode pre API 11 über eine leere Implementierung verfügt.
Dies ist eine Nicht-Antwort, weil ihr Code "onCreateView" überhaupt nicht aufruft. Es ist ein Fehler im Android SDK. [hier ist das Problem zu Sterne] (https://code.google.com/p/android/issues/detail?id=188677). – nkorth
@nkorth, 'onCreateView' wird von android aufgerufen, wenn es mit dem von getSystemService (Class) zurückgegebenen LayoutInflate inflatiert wird. ' Die api-Dokumente sagen das, genau dort, in dem Link, den ich Ihnen zur Verfügung gestellt habe und den Sie nicht gelesen haben. Zweitens ging es um die Verwendung von @SuppressLint, um die Warnung zu unterdrücken, nicht um die Ursache des Fehlers. Aber ein großes Lob an Sie, dass Sie einen Hinweis darauf finden. – user5292387
@SuppressLint ("NewApi") ist eine Anmerkung, die vom Android Lint-Tool verwendet wird.
Etwas in Ihrem Code ist nicht optimal oder kann abstürzen. Durch die Übergabe NewApi dort werden unterdrückt Sie alle Warnungen, die Sie würde sagen, wenn Sie eine API nach dem minSdkVersion
Für weitere Informationen und eine Entscheidung aussehen Android Lint Checks eingeführt verwenden: HERE
Sie können auch verwenden @ ZielApi. Der Unterschied besteht darin, dass Sie mit @TargetApi über den Parameter deklarieren, welche API-Ebene Sie in Ihrem Code adressiert haben, damit der Fehler erneut auftauchen kann, wenn Sie später die Methode so ändern, dass sie auf etwas Neueres verweist API-Ebene, die in @TargetApi angegeben wird.
@TargetApi ist bessere Annotation, ermöglicht es Ihnen, die Build-Tools "OK, ich habe diese Kategorie von Problemen" in einer feinkörnigeren Art und Weise behoben.
Eigentlich möchte ich überhaupt keine Anmerkungen verwenden und ich brauche sie auch nicht, weil mein Code überhaupt keine Aktivität # onCreateView verwendet. Fehler wird wegen Android API selbst ausgelöst. Ich versuche, den besten Workaround für den eigenen Fehler von Android zu finden. Ihre Antwort ist hilfreich, und ich danke Ihnen dafür, aber sie beantwortet meine eigentliche Frage nicht. – user65721
Wie von user5292387 erwähnt, wurde die oncreateview hinzugefügt. Anstatt die Flusen zu unterdrücken ich verwenden
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs)
{
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
super.onCreateView(parent, name, context, attrs) :
super.onCreateView(name, context, attrs);
}
Der erste Aufruf von super ist für Geräte, die Honeycomb Android OS laufen und größer. Der zweite Aufruf von Super ist für Geräte, die weniger als Honeycomb Android OS ausführen. Ich denke, es sieht sauberer aus anstatt null zu geben. Die Android-Dokumentation besagt jedoch, dass die Rückgabe von null zu einem Standardverhalten führt. Beide Lösungen sollten funktionieren. Ich bin jedoch skeptisch, ob ich null zurückgeben kann, da dies in späteren Versionen des Android SDK nachteilige Auswirkungen haben könnte.
Etwas, das jeder zu vermissen scheint, ist, dass er FragmentActivity aus der Supportbibliothek v4 verwendet. Laut Definition sollte diese Klasse bis hin zur Android API 4 kompatibel sein. Es sollte keine Warnung ausgegeben werden, da FragmentActivity eine eigene Implementierung von onCreateVivew() zur Verfügung stellt.
Es scheint mir, das ist ein Lint Bug.
Ich denke, die @SupressLint ("NewAPI") ist der einfachste Weg, um den Lint-Fehler zu umgehen (wie ich glaube nicht, dass es ein Fehler überhaupt ist). Beachten Sie auch, dass Lint-Fehler keine Kompilierungsfehler sind. Es sind Vorschläge für Sie, dass Sie möglicherweise Probleme in Ihrem Code haben oder es einen besseren Weg gibt, dies zu tun.
Mögliches Duplikat von [Aufruf erfordert API-Ebene 11 (aktuelle min ist 8) android.app.Activity # onCreateView] (http://stackoverflow.com/questions/32181705/call-requires-api-level-11current-min -is-8-android-app-activityoncreateview) – Murmel