validar studio solo separador que numeros numero moneda miles mascara formato eventos edittext dar java android google-maps textview

studio - separador de miles java



TextView no se actualiza (2)

Así que está tratando de actualizar la vista después de que regresó de getInfoContents() y eso no funcionará, ya que no es una vista en vivo, vea esto .

Algo que podría funcionar es llamar:

status.invalidate();

Tengo un problema tonto al actualizar texto en un TextView usando una clase de controlador. Estoy configurando una ventana de información personalizada en Google Maps.

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 "nombre" se está actualizando normalmente, mientras que "estado" TextView solo está actualizando su contenido y no se está actualizando visualmente en la pantalla. Intenté invalidar, runOnUiThread() , pero parece que nada funciona. Sé que la solución podría ser realmente obvia, pero no la veo.

¡De forma anticipada, muchas gracias por su ayuda!

EDITAR

Así es como probé runOnUiThread ().

public void updateTv(final TextView tv, final String s){ runOnUiThread(new Runnable() { @Override public void run() { tv.setText(s); tv.invalidate(); } }); }

Mi 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>

SOLUCIÓN

Actualicé mi ventana llamando a los comandos comentados y firmados con *** en el código anterior. Mi agradecimiento va a "clownba0t"


Esto vino del hecho de que Android es un sistema operativo que usa mensajes. Entonces, hay una parte del SO que lee mensajes y realiza acciones de acuerdo con el orden en el mensaje.

La actualización del texto en el TextView se realiza de esta manera: cuando ejecutas setText () tu código prepara un mensaje y lo envía al SO para decirle "Actualiza textView" ".

Podemos simplificar la explicación diciendo que puede enviar 10 cartas a un amigo, pero incluso si envía las 10 letras al mismo tiempo, tal vez no lleguen al mismo tiempo ...

Y aquí, ese es el caso: para Android, los mensajes para la interfaz de usuario no son mensajes de "prioridad". Pero el código de la aplicación tiene una alta prioridad. Entonces, cuando ejecutas el setText (), el mensaje se envía, pero el sistema operativo no lo lee porque, después de setText (), realizas una enorme acción de código. Entonces, el sistema operativo ejecuta su código y solo cuando este gran fragmento de código finaliza, el sistema operativo dice "Ah, bueno, tal vez recibí una carta", abre la carta y encuentra "Por favor actualice la vista de texto" y hágalo. Entonces ... DESPUÉS de usted gran pedazo de código.

¿Cómo resolver eso? Debe poner su gran pieza de código en un controlador.

TextView tmp_id_top_msg = (TextView) findViewById(R.id.text_top_clavier); tmp_id_top_msg.setText("message to display"); Handler handler_spend_time; handler_spend_time = new Handler(); handler_spend_time.postDelayed(Call_Huge_Code(), 100);

Entonces:

public Runnable Call_Huge_Code() { return new Runnable() { public void run() { // here your code... } }; }

Esto retrasará la ejecución del código en 100 milisegundos, lo que no es suficiente para "ralentizar" el proceso, pero que es suficiente para que Android lea el mensaje "refresh setText".