Es gibt eine BaseActivity mit einem Layout und einer Subaktivität, die diese BaseActivity erweitert.
Wie binden Sie Ansichten, sodass Ansichten in BaseActivity in BaseActivity verknüpft sind und Ansichten in Sub-Aktivitäten dort gebunden sind?
Hier ist ein Beispielcode, der das aktuelle Szenario erklärt, Hinweis : Beispielcode wurde aus hier <übernommen / p>
BASISAKTIVITÄT
%Vor%UNTERTÄTIGKEIT
%Vor%Das obige Szenario hat viele Fehler verursacht, wie z. B. das Auffinden der Ansicht mit der ID nicht möglich,
Nach vielen Recherchen fand ich eine Menge Themen, die dasselbe diskutierten,
Nachdem ich alle Links durchgegangen bin, habe ich die folgenden Kombinationen ausprobiert, aber keiner von ihnen hat funktioniert
ButterKnife.bind(this)
in BaseActivity, aber nicht in SplashActivity
auf.
ButterKnife.bind(this)
in beiden Aktivitäten auf. ButterKnife.bind(this)
in SplashActivity
, mit dieser Kombination konnte ich nicht auf die View-Elemente von BaseActivity zugreifen, da sie sich als null erwiesen haben. Meine Frage
Wie binden Sie die Elemente BaseActivity
und SplashActivity
View?
Genaue Fehlerzeile
%Vor%Für Ihre nette Notiz existieren die Ansichten im Layout.
Bearbeiten 1:
Ich habe Code hinzugefügt, der setContentView();
Es ist einfach.
Haben Sie Ihre abstrakte BaseActivity als:
%Vor% Dann erweitern Sie einfach Ihre Aktivität mit BaseActivity
als:
Ich bevorzuge mehrere Basisklassen in meinem Projekt. Sie können eine BaseToolbarActivity
haben, die BaseActivity
wie folgt erweitert:
Wenn also Ihre Activity
Layout-Symbolleiste hat, dann erweitern Sie sie auf BaseToolbarActivity
, ansonsten erweitern Sie sie auf BaseActivity
Für weitere solche Klassen können Sie mein Projekt unter
beziehenIch nur habe es geschafft, einen der Kommentare zu betrachten. Ich denke, dein wirkliches Problem ist überhaupt nicht mit der Unterklasse zu tun. Es ist das Layout. Ich denke, dass Sie das Unterklassenlayout im Oberklassenlayout einbeziehen wollen. Leider überlagern Sie das Superklassenlayout in der Unterklasse. Ich denke, Sie müssen das Layout der Basisaktivität in Ihre Unterklasse aufnehmen (wahrscheinlich in ein Merge-Tag im Layout eingebunden) Wiederverwendung von Layouts mit Include - Fügen Sie Ihr Basisaktivitätslayout (Symbolleiste usw.) in Ihre Unterklasse ein Layout (Begrüßungsbildschirm) ..
-
(Ich denke, die unten stehenden Informationen sind jetzt irrelevant, aber lassen Sie sie dort, falls Sie interessiert sind)
Also, wenn ich das Problem richtig verstehe, scheint es, dass im Wesentlichen die Butterknife Bindng in der Superklasse (Basisaktivität) passiert, bevor die Unterklasse (splashactivity) ihr Layout einrichten kann.
Die Idee, eine getLayourResourceId (überschrieben in der Unterklasse) zu verwenden, funktioniert wahrscheinlich für die meisten Leute, da sie der Unteraktivität erlaubt, ihr Layout für die Superaktivität zu spezifizieren, bevor sie butterknife.bind aufruft.
Wenn Sie also davon ausgehen, dass dies korrekt ist, wäre eine andere Möglichkeit, das Problem anzugehen, das Verzögern der Bindung, bis das Layout spezifiziert wurde.
mit anderen Worten;
%Vor%... bind wird später aufgerufen, wenn onStart aufgerufen wird .... }
%Vor%und
%Vor%Natürlich ist es nicht immer bequem (oder korrekt), von onStart zu binden, aber es könnte helfen, die Funktionsweise der anderen Lösungen aufzuzeigen.
Viel Glück, CJ
Die Nachricht in der Exception sagt Ihnen, was zu tun ist:
Erforderliche Ansicht 'txtName' mit der ID 2131296567 für das Feld 'txtName' wurde nicht gefunden. Wenn diese Ansicht optional ist, fügen Sie eine Annullierung "@nullable" hinzu.
Fügen Sie es entweder zu Ihrem Layout hinzu oder machen Sie die Feldbindung optional mit einer @Nullable-Annotation.
Siehe Link
in Aktivität A wird die Instanz von Aktivität A festgelegt. Entfernen Sie die Datei butterknife.bind in BaseActivity.
%Vor%Ordnen Sie die View-Instanz in childActivity mit ButterKnife.bind gut zu.
%Vor%für Fragment
%Vor%Sie entfernen das Buttermesser in der Basisaktivität. Grund darin, dass: - in der Basisaktivität keine Sicht vorhanden ist, Buttermesser zuzuweisen, unnötige annehmen, es gibt mehr als eine 10 Aktivität, die nicht leicht zu verwalten ist.
Aktualisieren Sie Ihre BaseActivity
als:
Und SubActivity
wie:
Tags und Links android butterknife