Ich habe ein dummes Problem, Text in einem TextView
mit einer Handler-Klasse zu aktualisieren. Ich stelle das benutzerdefinierte Info-Fenster in Google Maps ein.TextView nicht aktualisieren
mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(final Marker marker) {
//setting marker as final***
View v = getLayoutInflater().inflate(R.layout.my_layout, null);
TextView name = (TextView) v.findViewById(R.id.name);
final TextView status = (TextView) v.findViewById(R.id.status);
for(MyItem mi : myItems){
if(mi.getName().equals(marker.getTitle())){
name.setText(mi.getName()); //This one updates normaly
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//this one sets the text, but doesnt update on UI
status.setText("Text");
//Here I call my update text function
updateTv(status, "Text");
//Refreshing the window***
marker.showInfoWindow();
}
}, 5000);
break;
}
}
return v;
}
});
}
TextView
„name“ ist die Aktualisierung normalerweise, während „Status“ TextView
nur seinen Inhalt zu aktualisieren und nicht visuell auf dem Bildschirm zu aktualisieren. Ich habe versucht, ungültig zu machen, runOnUiThread()
, aber nichts scheint zu funktionieren. Ich weiß, dass die Lösung wirklich offensichtlich ist, aber ich sehe es nicht.
Vielen Dank für Ihre Hilfe im Voraus!
EDIT
Hier ist, wie ich runOnUiThread (versucht).
public void updateTv(final TextView tv, final String s){
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(s);
tv.invalidate();
}
});
}
Meine XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/name"
android:layout_gravity="center"
android:gravity="center_horizontal"
android:padding="10dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="..."
android:id="@+id/status"
android:gravity="center_horizontal"/>
</LinearLayout>
SOLUTION
aktualisiert ich mein Fenster durch Befehle kommentiert und unterzeichnet mit *** in dem obigen Code aufrufen. Mein Dank geht an "clownba0t"
Sie sollten UI-Element auf dem Haupt-Thread aktualisieren. Zeigen Sie den Code, den Sie verwendet haben, als Sie sagten, dass Sie runOnUiThread() ausprobiert haben. – HelloSadness
Würde es Ihnen etwas ausmachen, 'R.layout.my_layout' zu posten? – clownba0t
Ihr Layout xml? da name textView arbeitet, hat das wahrscheinlich nichts mit dem update-mechanismus zu tun, etwas stimmt nicht mit dem mapping! –