Textbilder in einem Fragment-Layout ändern sich nicht beim Aufruf von SetText ()

Meine Anwendung (min Level 13) ist eine Aktivität, die Tabs in der Aktionsleiste verwendet, um ein paar Fragmente zu verwalten, die sehr ähnlich sind.

Nun beginnt die Aktivität einen Dienst, der kontinuierliche Berechnungen durchführt und Werte zurückgibt, die ich in den Fragmenten anzeigen möchte. Die Activity-Service-Kommunikation wird über Broadcast-Empfänger implementiert und die Aktivität mischt die Daten an das entsprechende Fragment.

Alles scheint ordnungsgemäß eingerichtet und die Daten machen es zur Fragment-Update-Methode, aber wenn ich versuche, die neuen Werte in Textansichten anzuzeigen, werden die neuen Werte nie angezeigt.

Der Code zum Ändern der Textbilder:

TextView tv = (TextView) getView().findViewById(R.id.fieldNavGpsTime); Double doub = input.getDoubleExtra("com.some.thing.GPS_TIME", -1.0); tv.setText(doub.toString()); 

Der Code zum Aufrufen der Fragments-Aktualisierungsmethoden aus dem Broadcast-Empfänger in der Aktivität:

  NavigationGuiFragment navfrag = (NavigationGuiFragment) getFragmentManager().findFragmentByTag("navigation"); if (navfrag != null && navfrag.isResumed()) navfrag.UpdateNavUI(intent); 

Ich habe bemerkt, dass isVisible () scheint nicht ewig zurückzukehren, aber ich bin mir nicht sicher, was es bedeutet oder wie man es ändert.

Darüber hinaus kann ich nicht scheinen, eine Bildansicht zu einem Fragment programmgesteuert hinzuzufügen. Hier ist der Code (der sich in onActivityCreated () befindet):

  this.compass = new BasicCompass(getActivity()); LinearLayout ll = (LinearLayout) getView().findViewById(R.id.nav_hrztl_lnly); ll.addView(this.compass); 

Der BasicCompass-Konstruktor nimmt einen Kontext, freilich bin ich nicht ganz sicher, was ich passiere, ist richtig.

Der Code dafür wurde mehr oder weniger aus einer funktionierenden Aktivität genommen und in ein Fragment fallen gelassen, um Tabs zu erlauben. Ich bin offen für Vorschläge in Bezug auf die Änderung der Struktur des Codes.

Danke für jede Hilfe.

BEARBEITEN

Das XML-Layout des Fragments:

 <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_hrztl_lnly" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:focusable="true" android:focusableInTouchMode="true" android:baselineAligned="false" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="600dp" android:layout_height="fill_parent" android:orientation="vertical" android:focusable="true" android:focusableInTouchMode="true" > <EditText android:id="@+id/labelNavGpsTime" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/gps_time" /> <EditText android:id="@+id/fieldNavGpsTime" style="@style/field_padding" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/zero_3_digits" android:inputType="numberDecimal" /> <EditText android:id="@+id/labelNavLatitude" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/latitude" /> <EditText android:id="@+id/fieldNavLatitude" style="@style/field_padding" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/zero_6_digits" android:inputType="numberDecimal" /> <EditText android:id="@+id/labelNavLongitude" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/longitude" /> <EditText android:id="@+id/fieldNavLongitude" style="@style/field_padding" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/zero_6_digits" android:inputType="numberDecimal" /> <EditText android:id="@+id/labelNavAltitude" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/altitude" /> <EditText android:id="@+id/fieldNavAltitude" style="@style/field_padding" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/zero_3_digits" android:inputType="numberDecimal" /> <EditText android:id="@+id/labelNavRoll" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/roll" /> <EditText android:id="@+id/fieldNavRoll" style="@style/field_padding" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/zero_6_digits" android:inputType="numberDecimal" /> <EditText android:id="@+id/labelNavPitch" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/pitch" /> <EditText android:id="@+id/fieldNavPitch" style="@style/field_padding" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/zero_6_digits" android:inputType="numberDecimal" /> <EditText android:id="@+id/labelNavAzimuth" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/azimuth_heading" /> <EditText android:id="@+id/fieldNavAzimuth" style="@style/field_padding" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/zero_6_digits" android:inputType="numberDecimal" /> <LinearLayout android:id="@+id/nav_rdbtn_lnly" android:layout_width="match_parent" android:layout_height="wrap_content" > <RadioButton android:id="@+id/rdbtnNavGpsAvailability" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/gps_avail" /> <RadioButton android:id="@+id/rdbtnNavZuptStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/zupt_stat" /> </LinearLayout> </LinearLayout> 

Und das Fragment, das es benutzt:

 public class NavigationGuiFragment extends Fragment { private RadioButton gpsRdBtn; private RadioButton zuptRdBtn; private BasicCompass compass; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View fragview = inflater.inflate(R.layout.navigation_fragment, container, false); // sets up the rose image that serves as a compass in the GUI this.compass = new BasicCompass(getActivity()); LinearLayout ll = (LinearLayout) fragview.findViewById(R.id.nav_hrztl_lnly); ll.addView(this.compass); return fragview; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActivity().setContentView(R.layout.navigation_fragment); //Initialize the radio buttons gpsRdBtn = (RadioButton) getView().findViewById(R.id.rdbtnNavGpsAvailability); gpsRdBtn.setChecked(false); zuptRdBtn = (RadioButton) getView().findViewById(R.id.rdbtnNavZuptStatus); zuptRdBtn.setChecked(false); } @Override public void onResume() { super.onResume(); if (!IsMyServiceRunning()) { gpsRdBtn.setChecked(false); zuptRdBtn.setChecked(false); } } public void UpdateNavUI(Intent input) { TextView tv = (TextView) getView().findViewById(R.id.fieldNavGpsTime); Double doub = input.getDoubleExtra("com.some.thing.GPS_TIME", -1.0); tv.setText(doub.toString()); tv = (TextView) getView().findViewById(R.id.fieldNavLatitude); doub = input.getDoubleExtra("com.some.thing.LATITUDE", 100000.0); tv.setText(doub.toString()); tv = (TextView) getView().findViewById(R.id.fieldNavLongitude); doub = input.getDoubleExtra("com.some.thing.LONGITUDE", 100000.0); tv.setText(doub.toString()); tv = (TextView) getView().findViewById(R.id.fieldNavAltitude); doub = input.getDoubleExtra("com.some.thing.ALTITUDE", -1.0); tv.setText(doub.toString()); tv = (TextView) getView().findViewById(R.id.fieldNavRoll); doub = input.getDoubleExtra("com.some.androidndk.ROLL", 361.0); tv.setText(doub.toString()); tv = (TextView) getView().findViewById(R.id.fieldNavPitch); doub = input.getDoubleExtra("com.some.thing.PITCH", 361.0); tv.setText(doub.toString()); tv = (TextView) getView().findViewById(R.id.fieldNavAzimuth); doub = input.getDoubleExtra("com.some.thing.AZIMUTH", 361.0); tv.setText(doub.toString()); this.compass.SetDirection(doub.floatValue()); boolean bool = input.getBooleanExtra("com.some.thing.ZUPT_STATUS", false); zuptRdBtn.setChecked(bool); UpdateGpsIndicator(input); } public void UpdateGpsIndicator(Intent input) { boolean bool = input.getBooleanExtra("com.some.thing.GPS_ON", false); gpsRdBtn.setChecked(bool); } private boolean IsMyServiceRunning() { ActivityManager manager = (ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE); for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if ("com.some.thing.Service".equals(service.service.getClassName())) return true; } return false; } 

}

  • MapFragment in Aktion Bar Tabs
  • Android Navigation Schublade mit Aktivitäten umgesetzt
  • Fragmente in ViewPager werden neu erstellt
  • Android kann Fragmente nicht beibehalten, die in anderen Fragmenten verschachtelt sind
  • Fortschrittsdialog in DialogFragment anzeigen
  • Rückkehrübergang funktioniert bei der Verwendung von Fragment-gemeinsamen Übergängen nicht richtig
  • Fehlersicherer Zustand - Ziel nicht im Fragmentmanager (setTargetFragment)
  • Fragmentübergang Unterstützung 25.1.0 mit Recyclerview
  • One Solution collect form web for “Textbilder in einem Fragment-Layout ändern sich nicht beim Aufruf von SetText ()”

    diese Linie:

     getActivity().setContentView(R.layout.navigation_fragment); 

    Sollte in Activity.onCreate() aufgerufen werden und sicherstellen, dass es nur einmal angerufen wird. In deinem Code wird es jedes Mal aufgerufen, wenn Fragment in den aktiven Zustand verschoben wird. Und das TextView und RaidoButton Zeug wird zurückgesetzt, um zu definieren, definieren Sie im Layout xml.

    Checkout Fragment Lebenszyklus hier

    UPDATE: Manche View-Widget-Status wird von Activity gehalten, zB TextView. Versuchen Sie, Ihre setXXX() Methode auf onResume() . Ich habe Erfahrung, dass setXXX() nicht in onActivityCreated() funktioniert, sondern funktioniert gut in onResume() .

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.