Ich habe das SDK auf die neueste Version (API 23) aktualisiert und die onAttach(Activity)
Methode für Fragment ist veraltet. Anstatt diese Methode zu verwenden, verwende ich jetzt, onAttach(Context)
aber diese wird während des Lebenszyklus nicht aufgerufen. Die Aktivität ist eine Instanz AppCompatActivity
von v7 und das Fragment ist eine Instanz der Klasse Fragment ( android.app.Fragment
).
Irgendwelche Ideen, wie man die onAttach
Arbeit in API 23 zum Laufen bringt?
Lösung
Ich habe einige Antworten gefunden, die Ihnen helfen können, dieses Problem zu verstehen und zu beheben:
Lösungen:
Wenn Sie getSupportFragmentManager () verwenden, werden Sie gezwungen, ein Fragment aus der Support-Bibliothek zu verwenden. Die erste Lösung besteht also darin, alle Fragmente durch das Fragment aus support lib zu ersetzen und getSupportFragmentManager () zu verwenden.
Die Lösung, die ich bereits implementiert habe, besteht darin, zwei Möglichkeiten zu behandeln (1. Die App wird auf einem Gerät mit API <23 ausgeführt, die App wird auf einem Gerät mit API> = 23 ausgeführt).
Kurz gesagt, in meiner Implementierung habe ich eine Basisklasse für alle Fragmente aus dem Projekt und ich habe diesen Code dort hinzugefügt:
/*
* onAttach(Context) is not called on pre API 23 versions of Android and onAttach(Activity) is deprecated
* Use onAttachToContext instead
*/
@TargetApi(23)
@Override
public final void onAttach(Context context) {
super.onAttach(context);
onAttachToContext(context);
}
/*
* Deprecated on API 23
* Use onAttachToContext instead
*/
@SuppressWarnings("deprecation")
@Override
public final void onAttach(Activity activity) {
super.onAttach(activity);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
onAttachToContext(activity);
}
}
/*
* Called when the fragment attaches to the context
*/
protected void onAttachToContext(Context context) {
}
Jetzt überschreibe ich einfach die onAttachToContext (Context) -Methode für alle Fragmente, bei denen ich dies benötige.
@Override
auf deinemonAttach(Context)
? Wenn nicht, fügen Sie es hinzu. Wenn Sie dann einen Compilerfehler erhalten, der sich darüber beschwert, dass dies nicht deronAttach(Context)
Fall ist , stellen Sie sicher, dass Sie sich auf Version 23 von befindenappcompat-v7
.