2013-05-11 12 views
5

Chciałbym ustawić tekst w TextView mojej aplikacji (lication). To jest kod, którego użyłem:Android TextView setText nakładki poprzedni Tekst

TextView lonTextView = (TextView) findViewById(R.id.textViewLonWert); 
lonTextView.setText(longitude.toString()); 

Właściwie działa, ale poprzedni tekst jest nadal wyświetlany! Na przykład 4 nakłada się na 8 (nie można już odczytać tekstu).

Mam Działalność rozpoczynającą usługę. Następnie zarejestrowanie LocalBroadcastReceiver w działaniu. Usługa zewnętrznie wysyła obiekty lokalizacji do działania. Z lokalizacji, którą otrzymuję np. długości geograficznej i chciałoby zaktualizować widok tekstowy (zawiera tylko długość geograficzną) o nowej długości geograficznej.

Byłbym bardzo zadowolony, gdyby ktoś wpadł na pomysł rozwiązania tego problemu.

UPDATE: pełny kod jest dość długa, więc tutaj są odpowiednie fragmenty:

TrackingActivity.java

public class TrackingActivity extends Activity { 

// GPSTracker class 
GPSTracker gps; 

public String filename; 

/* Um eigene Position anzuzeigen */ 
ArrayList<OverlayItem> overlayItemArray; 
protected MapView mapView; 
protected MapController mapController; 
public Boolean isPause; 
public Boolean isTracking; 
public MyLocationOverlay myLocationOverlay; 
PathOverlay myPath; 
List<GeoPoint> path; 

public BroadcastReceiver screenReceiver; 

/* Textviews setzen */ 
TextView lonTextView; 
TextView latTextView; 
TextView altTextView; 
TextView accTextView; 

// Initiating Menu XML file (menu.xml) 
/*@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 

    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu_tracking, menu); 
    MenuItem mi_startTracking = menu.findItem(R.id.start_tracking); 
    mi_startTracking.setVisible(true); 
    return true; 
}*/ 

/** 
* Event Handling for Individual menu item selected 
* Identify single menu item by it's id 
* */ 
@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    ... 
}  

@Override 

public boolean onPrepareOptionsMenu(Menu menu) { 
    ... 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tracking); 

    isTracking = false; 
    isPause  = false; 

    // create GPS-class object 
    gps = new GPSTracker(TrackingActivity.this 
         ,null); 

    myPath = new PathOverlay(Color.RED, this); 
    path = new ArrayList<GeoPoint>(); 

    /* Map anzeigen */ 
    mapView = new MapView(this, 500); 
    mapView.setTileSource(TileSourceFactory.MAPNIK); 
    org.osmdroid.views.MapView.LayoutParams mapParams = new     org.osmdroid.views.MapView.LayoutParams(
      org.osmdroid.views.MapView.LayoutParams.MATCH_PARENT, 
      org.osmdroid.views.MapView.LayoutParams.MATCH_PARENT, 
      null, 0, 0, 0); 
    /*löst Fehler aus: mapView.setClickable(true);*/ 
    mapView.setBuiltInZoomControls(true); 
    mapController = new MapController(mapView); 
    mapView.getController().setZoom(15); 


    //--- Create Overlay 
    overlayItemArray = new ArrayList<OverlayItem>(); 

    DefaultResourceProxyImpl defaultResourceProxyImpl = new DefaultResourceProxyImpl(this); 
    MyItemizedIconOverlay myItemizedIconOverlay   = new MyItemizedIconOverlay(
                 overlayItemArray, null, defaultResourceProxyImpl); 
    mapView.getOverlays().add(myItemizedIconOverlay); 
    //--- 

    //Add current position 
    myLocationOverlay = new MyLocationOverlay(this, mapView); 
    mapView.getOverlays().add(myLocationOverlay); 

    /* Lege Pfad auf Karte */ 
    mapView.getOverlays().add(myPath); 
    mapView.invalidate(); 
    LinearLayout myLayout = (LinearLayout) findViewById(R.id.trackingLinearLayoutMap); 

    myLayout.addView(mapView,mapParams); 

} 

private BroadcastReceiver gpsDataReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     //Log.d("TrackingActivity", "in Receiver"); 
     /* alles was der Service liefert */ 
     String action  = intent.getAction(); 
     Double altitude  = intent.getDoubleExtra("altitude", 0); 
     Double longitude = intent.getDoubleExtra("longitude", 0); 
     Double latitude  = intent.getDoubleExtra("latitude", 0); 
     Bundle b   = intent.getExtras(); 
     Location location = (Location)b.get("location"); 

     Log.d("received","Receiver: "+longitude+" ; "+latitude); 


     //Log.d("TrackingActivity", "vor GeoPoint"); 
     GeoPoint locGeoPoint = new GeoPoint(latitude, longitude); 

       /* Erstelle Pfad */ 
     if(isTracking){ 
      path.add(locGeoPoint); 
      myPath.addPoint(locGeoPoint); 
     } 
     //Log.d("TrackingActivity", "nach GeoPoint: "+locGeoPoint.toString()); 
     mapController.setCenter(locGeoPoint); 

     setOverlayLoc(location); 

     /* Textviews Werte setzen */ 
     lonTextView = (TextView) findViewById(R.id.textViewLonWert); 
     lonTextView.setText(longitude.toString()); 
     //lonTextView.invalidate(); 

     latTextView = (TextView) findViewById(R.id.textViewLatWert); 
     latTextView.setText(latitude.toString()); 
     //latTextView.invalidate(); 

     altTextView = (TextView) findViewById(R.id.textViewAltWert); 
     altTextView.setText(altitude.toString()); 
     //altTextView.invalidate(); 

     accTextView = (TextView) findViewById(R.id.textViewAccWert); 
     accTextView.setText(Float.toString(location.getAccuracy())+" m"); 
     //accTextView.invalidate(); 

     /* Karte aktualisieren */ 
     mapView.invalidate(); 

    } 
}; 
... 
@Override 
protected void onResume() { 
    super.onResume(); 
    /* Registriere BroadcastReceiver für GPSDaten */ 
    LocalBroadcastManager.getInstance(this).registerReceiver(gpsDataReceiver, new IntentFilter("gpsdata")); 

     ... 

} 
... 

Oto mój układ xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/trackingLinearLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<LinearLayout 
    android:id="@+id/trackingStatusOuterWrapper" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="kein GPS Signal" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 

    <LinearLayout 
    android:id="@+id/trackingStautsInnerWrapper2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
     <TextView 
     android:id="@+id/textViewLonLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Länge: " 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 
     <TextView 
     android:id="@+id/textViewLonWert" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 
     <TextView 
     android:id="@+id/textViewLatLabel" 
     android:layout_marginLeft="40dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Breite: " 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 
     <TextView 
     android:id="@+id/textViewLatWert" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 

    </LinearLayout> 
    <LinearLayout 
    android:id="@+id/trackingStautsInnerWrapper3" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

     <TextView 
     android:id="@+id/textViewAltLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Höhe: " 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 
     <TextView 
     android:id="@+id/textViewAltWert" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 
     <TextView 
     android:id="@+id/textViewAccLabel" 
     android:layout_marginLeft="40dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Genauigkeit: " 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 
     <TextView 
     android:id="@+id/textViewAccWert" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textSize="10sp" /> 
    </LinearLayout> 
</LinearLayout> 
<!-- 
<org.osmdroid.views.MapView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mapview" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:clickable="true"/> 
--> 

<LinearLayout 
    android:id="@+id/trackingLinearLayoutMap" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

</LinearLayout> 

Mam nadzieję, że to pomoże!

+2

Czy możesz opublikować pełny kod & xml? R –

+0

zaktualizowałeś moje pytanie z kodem. – zuluk

Odpowiedz

4

Nigdy w to nie uwierzycie, ale jeśli przejdziecie na numer How often can you update a textview without mess, znajdą państwo pytanie i odpowiedź, które moim zdaniem rozwiązują ten problem.

Jeśli to nie rozwiąże problemu, może być konieczne zastąpienie przycisku niestandardowym widokiem z onDraw zastąpionym przy użyciu canvas.drawText(), aby umieścić tekst na miejscu. Można wówczas należy wytrzeć każdą poprzednią historię ...

jeśli po prostu chcesz się nieprzejrzystych czarne tło, stworzyć (lub dodanie) plik colors.xml w katalogu res:

<resources> 
    <color name="black">#ff000000</color> 
</resources> 

i dodaj:

android:background="@color/black" 

Do xml dla TextView.

+0

Awesome, to ten sam problem. Dziękuję Ci bardzo! – zuluk

+0

To bardzo dziwne! nie słyszałem o tym! Istnieje inny sposób sprawdzenia tego problemu. spróbuj usunąć wszystkie pozostałe widoki tekstowe w układzie liniowym. być może jedna z nich nakłada się na drugą. –

+0

@UdiOshi To zawsze warto sprawdzić, ale nie w przypadku, na które wskażę ... –

-1

Linia android:text="" w

<TextView 
    android:id="@+id/textViewLonWert" 
    android:layout_width="80dp" 
    android:layout_height="wrap_content" 
    android:text="" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textSize="10sp" /> 

jest zbędny, można usunąć tę linię.

+1

To nie jest odpowiedź na oryginalne pytanie. Zamiast tego byłoby lepiej jako komentarz. –

Powiązane problemy