Android Text von TextView in Fragment in FragmentPagerAdapter festlegen

8

Dieser macht mich verrückt. Grundsätzlich möchte ich ein ViewPager erstellen und ein paar Fragment s hinzufügen. Dann, alles was ich tun möchte, wird ein Wert in einem der Fragment s TextView s gesetzt. Ich kann die Fragment s hinzufügen und sie anhängen, aber wenn ich für eines der findViewById() s im ersten TextView zu Fragment gehe, wird ein NullPointerException geworfen. Ich, für das Leben von mir, kann nicht herausfinden, warum.

Hier ist mein Code bis jetzt, lassen Sie mich wissen, wenn mehr benötigt wird bitte.

%Vor%

Alle von Fragment s, die ich erstellt habe, haben nur die onCreateView() -Methode überschrieben, damit ich das richtige XML-Layout anzeigen kann. Abgesehen davon sind sie "Lager". Warum kann ich nicht mit Elementen in Fragment s interagieren?

UPDATE:

Machen Sie so etwas?

%Vor%

XML-LAYOUT FÜR FRAGMENT A

%Vor%     
Josh I 03.07.2014, 16:37
quelle

4 Antworten

3

Sofern Sie nicht planen, den Wert zur Laufzeit zu ändern, können Sie den Wert als Parameter in das Fragment übergeben. Es wird gemacht, indem ich ein Bündel benutze und es als Argumente in ein Fragment übergebe, welches es dann von seinen Argumenten abruft. Weitere Informationen hier . Wenn Sie dies implementieren, sieht Ihre Instanziierung neuer Fragmente möglicherweise so aus:

%Vor%

Wenn Sie jedoch planen, den Wert zur Laufzeit zu aktualisieren (er wird sich ändern, wenn der Benutzer die App ausführt), möchten Sie eine Schnittstelle für die Kommunikation zwischen Ihrem Fragment und Ihrer Aktivität verwenden. Info hier . So könnte es aussehen:

%Vor%

und es wird Ihre Textansicht im Fragment aktualisieren.

Obwohl es "einfacher" gemacht werden kann, werden diese Methoden empfohlen, da sie die Wahrscheinlichkeit von Fehlern reduzieren und Code viel lesbarer und wartbarer machen.

BEARBEITEN: So sollte dein Fragment aussehen (deinen Code geändert haben):

%Vor%

Wenn Sie danach immer noch eine Nullzeiger-Ausnahme erhalten, befindet sich Ihr TextView NICHT dort, wo es für mich benötigt wird, nämlich in der Datei R.layout.fragment_a, und es muss sich dort befinden. Es sei denn, Sie rufen die Schnittstellenmethode VOR dem Laden des Fragments auf, natürlich.

    
C0D3LIC1OU5 03.07.2014, 16:46
quelle
5

TextView befindet sich im Fragmentlayout, nicht in ViewPagers oder PagerAdapter , was die NPE verursacht. Jetzt haben Sie 2 Möglichkeiten.

  • Der erste ist der einfachste, Sie sollten Ihren Code einfach bewegen, um den Text in die Klasse des entsprechenden Fragments zu ändern, in diesem Fall FragmentA.
  • Zweitens könnten Sie das TextView in FragmentA static machen, damit andere Klassen darauf zugreifen können. Ihr Code würde also etwa so aussehen:

    %Vor%

Und dann würden Sie den Text von woanders ändern (wenn es wirklich notwendig ist):

%Vor%

Erklärungsmethode 2

Verwenden Sie Folgendes in Ihrem Fragment.

%Vor%

Ändern Sie dann den Text wie folgt:

%Vor%     
Aashir 03.07.2014 16:49
quelle
1

Diese Zeile:

%Vor%

sucht nach der Ansicht in Ihrer ParentActivity. Natürlich wird es es nicht finden und das ist, wenn Sie Ihre NPE bekommen.

Versuchen Sie etwas wie folgt:

  1. Fügen Sie Ihren Fragmenten ein "tag" hinzu, wenn Sie sie hinzufügen

  2. Verwenden Sie someFragment = getSupportFragmentManager().findFragmentByTag("your_fragment_tag")

  3. Erhalten Sie die Ansicht des Fragments fragmentView = someFragment.getView();

  4. Und schließlich finden Sie Ihre TextView und setzen Sie den Text

    TextView t = (TextView) fragmentView.findViewById(R.id.someTextViewInFragmentA); t.setText("some text");

Carlos J 03.07.2014 16:47
quelle
0

Wie wäre es, diese Zeile zu ändern?

%Vor%

bis

%Vor%

oder nicht haaaaaaaa dann können Sie versuchen, "t" mit .setText ("some_string") innerhalb von "SheetActivity" zu aktualisieren.

    
Artis JIANG 21.09.2015 08:23
quelle