He estado muy confundido acerca de esto recientemente y no puede encontrar una respuesta en cualquier lugar.

Cuando la programación para android, quiero actualizar un textview cada 10 segundos, pero ¿cómo iba yo a eso? He visto algunas muestras de uso «Run()» y «Update()», pero que no parece ayudar cuando lo intento, alguna idea?

Ahora mismo tengo:

public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.slideshow); CONST_TIME = (int) System.currentTimeMillis(); Resources res = getResources(); myString = res.getStringArray(R.array.myArray); } public void checkTime(View V){ TextView text = (TextView) findViewById(R.id.fadequote); CUR_TIME = (int) System.currentTimeMillis(); text.setText(""+(int) (CUR_TIME-CONST_TIME));//Debugs how much time has gone by if(CUR_TIME-CONST_TIME>10000){ getNextQuote(null); //A function that gets a random quote CONST_TIME = CUR_TIME; } }

Supongo que lo que estoy preguntando es ¿cómo puedo hacer checkTime() repetir propia, sin cesar, hasta que onPause() se llama?

InformationsquelleAutor QQWW1 | 2011-01-23

5 Comentarios

  1. 10

    Lo que sobre el uso de un temporizador?

    private Timer timer = new Timer();
    private TimerTask timerTask;
    timerTask = new TimerTask() {
     @Override
     public void run() {
        //refresh your textview
     }
    };
    timer.schedule(timerTask, 0, 10000);

    Cancelar a través de temporizador.cancel(). En su ejecución() método que usted podría utilizar runOnUiThread();

    ACTUALIZACIÓN:

    Tengo un livescoring de la aplicación, que utiliza el Temporizador para actualizar cada 30 seg. Se parece a esto:

    private Timer timer;
    private TimerTask timerTask;
    
    public void onPause(){
        super.onPause();
        timer.cancel();
    }
    
    public void onResume(){
        super.onResume();
        try {
           timer = new Timer();
           timerTask = new TimerTask() {
              @Override
              public void run() {
             //Download file here and refresh
              }
           };
        timer.schedule(timerTask, 30000, 30000);
        } catch (IllegalStateException e){
           android.util.Log.i("Damn", "resume error");
        }
    }
    • Donde puse «Timertask = new TimerTask(){…}; temporizador.horario(tiemrTask,0,10000);» ? Justo debajo de mi clase o tengo que ponerlo bajo onResume();? Debido a que tengo errores si lo pongo en mi clase.
    • He actualizado mi post. ¿Qué errores qué se obtiene? (LogCat de salida)
    • Así que, yo hice eso exactamente (excepto que en lugar de «//archivo de Descarga de aquí y de actualización de» yo lo hice «getNextQuote(null)», que aleatoriamente a encontrar una cita de una matriz y la actualización de los textview con el nuevo presupuesto, pero sólo hará que una vez, no de forma continua. Me puse Timertask a 10 si que hace que cualquier tipo de diferencias. También hay errores en el LogCat
    • En realidad, me equivoco, me pone «android.util.Registro.i(«Éxito»,»getNextQuote devuelto»);» después de getNextQuote(null); y sale cada 10 segundos!!!.. lo más probable es un error en la función de sí mismo.. gracias!
    • Eres bienvenido. Me alegro de que te pueda ayudar. Para actualizar el TextView que podría usar algo como runOnUiThread si usted está esperando un error como este: «Sólo el hilo original que creó una jerarquía puede tocar sus puntos de vista». Buena suerte!
  2. 15

    Vez de andar con un subproceso en segundo plano y, a continuación,runOnUiThread(), uso postDelayed(), disponible en cualquier View, para programar una Runnable. Que Runnable puede actualizar su TextView y, a continuación, horario de sí mismo para la siguiente pasada. El uso de un subproceso de fondo para los fines de observar el tiempo garrapata es un desperdicio.

    • ¿Cómo se puede utilizar este mecanismo cuando se actualiza un elemento listview? dado que una visión puede ser reutilizado, en cuyo caso, previamente programada ejecutable debe ser eliminado. ¿cómo se puede eliminar un enviado de ejecutables?
    • ¿se elimina el desplazamiento de ejecutables»), llame removeCallbacks().
    • Gracias @CommonsWare. Nunca me di cuenta de que el método en la clase de Vista. Que deben trabajar.
    • Sé que este es un viejo post, pero tenía que upvote y comentario porque esto es simple genio. He reciclador de vista cuyo elemento es un poco complejo y también tiene un textview que muestra el tiempo que hace tictac. Ahora para actualizar cada uno de los textview sencillamente, no se puede llamar a cualquier método de notificación. Por este camino sólo el textview se actualiza. Brillante @CommonsWare gracias
    • Creo que deberíamos crear un controlador y el uso de WeakReference a una vista para evitar fugas de memoria, ¿qué decir? 🙂
    • Que es más complejo de lo que he descrito, y no veo cómo se añade algún valor. Un View no va a ser filtrado, a menos que usted haga algo malo en su propio código, como poner la View en un static campo.
    • Umm, no se que hacer algunas operaciones de vista dentro del método run? y no que la visión particular de fugas de contexto?
    • Llame removeCallbacks() cuando ya no necesite el trabajo periódico, o por onDestroy(). Hasta entonces, nada se filtró, porque el View y su Activity todavía existen.
    • sí que es verdad! 🙂

  3. 8

    Estoy de acuerdo con Wired00 la respuesta, pero por favor, sigue este orden:

            //update current time view after every 1 seconds
            final Handler handler=new Handler();
    
            final Runnable updateTask=new Runnable() {
                @Override
                public void run() {
                    updateCurrentTime();
                    handler.postDelayed(this,1000);
                }
            };
    
            handler.postDelayed(updateTask,1000);
  4. 5

    caso de ayuda a alguien de aquí es un ejemplo de código utilizando postDelayed()

    private Handler mHandler = new Handler();

    //call updateTask after 10seconds
    mHandler.postDelayed(updateTask, 10000);

    private Runnable updateTask = new Runnable () {
        public void run() {
            Log.d(getString(R.string.app_name) + " ChatList.updateTask()",
                    "updateTask run!");
    
                        //run any code here...         
    
                        //queue the task to run again in 15 seconds...
                        mHandler.postDelayed(updateTask, 15000);
    
    
        }
    };

Dejar respuesta

Please enter your comment!
Please enter your name here