findViewById im Fragment
Ich versuche zu erstellen, die eine Bildansicht in einem Fragment, die beziehen sich auf die Bildansicht element, welches ich erstellt habe, in der XML-Datei für das Fragment. Jedoch, die findViewById
Methode funktioniert nur, wenn ich verlängern einer Activity-Klasse. Gibt es trotzdem kann ich es verwenden, im Fragment als auch?
public class TestClass extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ImageView imageView = (ImageView)findViewById(R.id.my_image);
return inflater.inflate(R.layout.testclassfragment, container, false);
}
}
Den findViewById
- Methode ein Fehler auf, welche besagt, dass die Methode undefiniert ist.
Verwenden ButterKnife viewbinding Bibliothek für android. Auch demonstrieren, wie es funktioniert, wie zu integrieren und zu verwenden in Ihren android-app-Entwicklung zu machen, Ihre Entwicklung schneller.
"Einige" Zeit vergangen, aber Sie haben noch immer nicht akzeptiert, eine Antwort. Sie können wählen Sie die Antwort, die Ihnen bisher am meisten geholfen, so kann dies so markiert werden, beantwortet?
"Einige" Zeit vergangen, aber Sie haben noch immer nicht akzeptiert, eine Antwort. Sie können wählen Sie die Antwort, die Ihnen bisher am meisten geholfen, so kann dies so markiert werden, beantwortet?
InformationsquelleAutor simplified. | 2011-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden getView() oder dem View-parameter aus der Umsetzung der
onViewCreated
Methode. Es gibt die root-view für das fragment (der zurückgegebenenonCreateView()
Methode). Mit diesem können Sie nennenfindViewById()
.Als
getView()
funktioniert nur nachonCreateView()
Sie kann es nicht verwenden innerhalbonCreate()
oderonCreateView()
Methoden des fragments .was ist also die Funktion, die ich überschreiben kann, um dies zu implementieren, wenn onCreate ist nicht der richtige Ort ?
Dies hilft nicht, wenn die
ImageView
kommt von der übertriebenen layout - siehe meine Antwort für details. Ansonsten onCreateView ist der richtige Ort, um dies zu tun @N-AccessDevDer beste Ort, um dies zu tun, die onViewCreated Methode
Die Dokumentation besagt, dass
onActivityCreated()
ist die empfohlene Stelle zu finden, und Verweise auf Ihre Ansichten. Sie muss bereinigen diese gespeicherten Referenzen indem Sie wieder aufnull
imonDestroyView()
oder Sie wird undicht dieActivity
.InformationsquelleAutor advantej
Müssen Sie aufblasen, um das Fragment der Ansicht und rufen
findViewById()
auf dieView
es gibt.Dann wird die Klasse, die "Eigentümer" und aufgeblasen Bildansicht muss der öffentlichkeit zur Verfügung. Das ist sehr schlechte Praxis, wenn. Fragmente sollten nur Zugriff auf die UI-Elemente, die in Ihrem layout.
Sieht aus wie es ist etwas falsch in Ihrem code (Aktualisierung UI von einem hintergrund-thread), nicht von mir.
Danke, es war nützlich. Als zusammenhangsloser Kommentar: versuchen Sie, zu bleiben, um Java-Namenskonventionen in Ihrem code. "V" sieht nicht aus wie ein Variablen-Namen in Java.
Dies sollte die richtige Antwort. Das akzeptiert man verlässt Sie mit
NullPointerException
.InformationsquelleAutor LeffelMania
Innen
Fragment
Klasse erhalten Sie onViewCreated() Methode überschreiben, wo Sie sollten immer initialisiert werden, Ihre Ansichten in dieser Methode müssen Sie das view Objekt erhalten, mit denen Sie Ihre Ansichten wie :Immer daran denken, im Fall von Fragment, das
onViewCreated()
Methode nicht automatisch aufgerufen, wenn Sie null zurückgeben odersuper.onCreateView()
ausonCreateView()
Methode.Es wird standardmäßig bei
ListFragment
alsListFragment
zurückFrameLayout
standardmäßig.Hinweis: Sie können das fragment Sicht überall in der Klasse
getView()
einmalonCreateView()
wurde erfolgreich ausgeführt.also
Mit
view
übergebenonViewCreated
noch UrsachenNullPointerException
aber mitgetActivity()
ist in Ordnung. Irgendwelche Ideen, warum?Es kann sein, dass du nicht wieder ein nicht-null anzeigen in der onCreateView() lifecycle-Methode des fragment. Nun, im Falle von getActivity Sie bekommen Blick von Ihrer Tätigkeit eher als fragment Haupt-Ansicht davon abhängt, was-id, die Sie auf der Durchreise sind. Bitte überprüfen Sie die Rücksendung eines nicht-null anzeigen aus onCreateView oder nicht? Dann lass es mich wissen.
Ich zurück Blick von
onCreateView
Methode. Ich habe gerade ausgetestet und es stellt sich heraus, es ist ein layout (in meinem FallFrameLayout
). That being said, wenn ich versuche zu finden ein element, es gibtnull
. Warum ist es passiert?können Sie bitte teilen Sie Ihre Klasse von fragment und entsprechende layout.
InformationsquelleAutor Ankur Chaudhary
Merke ich, das ist eine alte Frage, aber die vorherrschende Antwort lässt etwas zu wünschen übrig.
Die Frage ist nicht klar, was erforderlich ist, von
imageView
- sind wir immer wieder, wie der Blick, oder nur das speichern einer Referenz für später?Entweder Weg, wenn die
ImageView
kommt aus der aufgeblasenen layout, den richtigen Weg, dies zu tun wäre:Sie würde entweder speichern Sie einen Verweis auf die Bildansicht irgendwo handlich, oder fragment.getView().findViewById(R. id.my_image), wenn Sie es brauchen. In einem ListFragment, vorausgesetzt das Bild wird in einem Listenelement, Sie würde in der Regel eine Referenz-Halter mit der setTag/getTag Methoden der list-view-item in deinem Adapter die getView-Methode - es gibt viele Beispiele, wie dies zu tun.
InformationsquelleAutor MattJenko
Erste fragment, Ansicht, und dann bekommen Sie aus dieser Sicht Ihre Bildansicht.
onCreateView erzeugt und liefert die view-Hierarchie im Zusammenhang mit dem fragment.onCreate wird aufgerufen, um der ursprünglichen Erstellung des fragments. In der Tat, es hängt davon ab, was Sie schreiben in diese Methoden.
Okay, aber wie kann ich das deklarieren von Variablen in der onCreate ? Da die Sicht im inneren der onCreateView-Methode .
haben Sie jemals herausfinden werden, wie dies aus der onCreate-Methode?
Diese Antwort sollte sein gekennzeichnet als die Lösung.
InformationsquelleAutor xevincent
Könnten Sie es auch tun, in der
onActivityCreated
Methode.Wie Sie hier tun: http://developer.android.com/reference/android/app/Fragment.html (deprecated API level 28)
und
sind möglich.
InformationsquelleAutor friiky
getView()
wird das root-viewInformationsquelleAutor dreamdeveloper
Können Sie überschreiben onViewCreated (), die aufgerufen wird, direkt nachdem alle Aussicht hatte, wurde aufgeblasen. Es ist der richtige Ort, um zu füllen in Ihrem Fragment Mitglied
View
Variablen. Hier ist ein Beispiel:InformationsquelleAutor Lez
Die Methode getView() wird nicht funktionieren auf Fragmente außerhalb OnCreate und ähnliche Methoden.
Haben Sie zwei Möglichkeiten, übergeben Sie die Ansicht, um die Funktion auf der oncreate (was bedeutet, dass Sie nur ausgeführt werden können, Ihre Funktionen, wenn die Ansicht erstellt wird) oder legen Sie die Ansicht als eine variable:
InformationsquelleAutor sagits
InformationsquelleAutor sandhu
1) zuerst aufblasen layout des Fragments, dann können Sie findviewbyId .
arbeitete wie ein Charme vielen Dank
InformationsquelleAutor priti
vereinbart mit dem Aufruf
findViewById()
auf der Ansicht.InformationsquelleAutor Pajeh
Laut der Dokumentation auf API-Ebene 11
Referenz im Stack Zurück
http://developer.android.com/reference/android/app/Fragment.html
kurzen code
InformationsquelleAutor Dexter
Mit
getView()
gibt den Blick auf das fragment, dann können Sie anrufenfindViewById()
Zugriff auf alle view-element im fragment anzeigen.korrigiert meine Antwort
InformationsquelleAutor Mahmoud Badri
Verwenden
wird es funktionieren
InformationsquelleAutor Manoj ahirwar
1) Erklären Sie Ihre layout-Datei.
2)Dann bekommt man die id der view
InformationsquelleAutor Nanda Gopal
Hinweis :
Aus der API-Level 26, Sie brauchen auch nicht speziell cast das Ergebnis findViewById wie es verwendet Inferenz für seine Rückkehr geben.
So, jetzt können Sie einfach tun,
InformationsquelleAutor Novo Lucas
Versuchen Sie dies, es funktioniert für mich
ok, die einen können Sie mich sahen?
Tut mir Leid, ich kann nicht ganz verstehen, Ihr Englisch, aber alles ist jetzt behoben. Ich habe nichts, Sie zu zeigen.
InformationsquelleAutor Bipin Bharti
Der beste Weg, um dies zu implementieren, ist wie folgt:
In dieser Art und Weise, die rootView kann verwendet werden für jedes Steuerelement definiert in der xml-layout und der code ist viel sauberer in dieser Art und Weise.
Hoffe, das hilft 🙂
InformationsquelleAutor
Gibt es eine weitere Methode namens onViewCreated.
InformationsquelleAutor Raja Jawahar
Verwenden gradle Skelett-plugin, es generiert automatisch die Ansicht Halter-Klassen mit dem Verweis auf Ihr layout.
Nun davon aus, dass Sie eine
ImageView
erklärt in Ihremmy_layout.xml
- Datei, wird es automatisch zu generieren myLayout Klasse für Sie.InformationsquelleAutor Ilya Gazman
Versuchen Sie Dies:
InformationsquelleAutor AbhayBohra
versuchen
getView()
späterInformationsquelleAutor Ramkumar.M
Können Sie anrufen
findViewById()
mit der Activity-Objekt erhalten Sie in Ihrempublic void onAttach(Activity activity)
- Methode innerhalb Ihres Fragments.Speichern Sie die Aktivität in eine variable zum Beispiel:
In der Fragment-Klasse:
private Activity mainActivity;
In der
onAttach()
Methode:this.mainActivity=activity;
Schließlich führen Sie jede findViewById durch die vairable:
mainActivity.findViewById(R.id.TextView);
InformationsquelleAutor mrSurprise
Innen onCreateView-Methode
1) zuerst müssen Sie aufblasen, um das layout/Ansicht ein, die Sie hinzufügen möchten
zB. LinearLayout
2) Dann finden Sie Ihre Bildansicht id vom layout
3)drücken Sie die überhöhten layout
InformationsquelleAutor Devendra Kulkarni
Haben Sie aufblasen, um den Blick
InformationsquelleAutor Surajit Mondal
In Fragmente brauchen wir ein Blick auf die Fenster, so dass wir eine onCreateView von diesem Fragment.
Dann bekommen Sie die Ansicht und verwenden Sie es auf jede und jeden view-id, die view-Elemente..
InformationsquelleAutor Mayank Garg
Layout inflater kommt ins Bild hier. Layout inflater ist eine Klasse, die machen uns in der Lage, verwenden Sie die XML-sichten in java-code. So können Sie Pumpen Sie den root-xml-Ansicht in der variable v mit dem folgenden code. Und dann mit v, Sie können finden das Kind Blick auf das root-Ansicht v.
InformationsquelleAutor Wijay Sharma
Der einfachste Weg, um solche Dinge zu verwenden, butterknife
Durch diese können Sie hinzufügen, wie viele Onclciklisteners nur von @OnClick() wie unten beschrieben:
InformationsquelleAutor Amit
getView()
funktioniert nur nachonCreateView()
abgeschlossen, so invoke es ausonPostCreate()
:InformationsquelleAutor SwiftArchitect