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.

  • So installieren Sie einfach apk in Gerät in Android Studio
  • Unterschied zwischen BOOT_COMPLETED und QUICKBOOT_POWERON auf Android
  • Rufen Sie eine Service-Klasse an Einmal am Tag, wenn die Anwendung startet in Android, mit weniger Batterieverbrauch
  • Erhalten Sie das zugehörige Bild (Drawable) in ImageView android
  • Warum bekomme ich einen NoClassDefFoundError beim Ausführen meines Tests auf eine ActionBarActivity?
  • Was ist der Code für ein erfrischtes Facebook-Token in einer Android-App?
  • 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; } 

    }

  • Google Cloud Vision API Berechtigung verweigert
  • JSON Parsing Problem mit Spinner
  • Android WebViewClient onReceivedError wird nicht für einen 404-Fehler aufgerufen
  • Programmgesteuertes Ausschalten des Android-Telefons
  • Umgang mit Headset-Tasten vor Voice Search auf Jelly Bean
  • Android ScrollView Layout Problem
  • 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.