Atualize dinamicamente TextView no Android

Eu sou bastante novo no desenvolvimento do Android. Alguém pode me informair as APIs relevantes paira atualizair dinamicamente um TextView (ou canvas inteira)?

Por exemplo: eu tenho um aplicativo de search e preciso mostrair os resultados como eles são encontrados em vez de aguairdair todos os resultados e depois mostrair.

  • Android Mairket - os únicos relatórios de crashs que recebo estão em plataforms "OTHER"
  • java.lang.NumberFormatException: Invalid int: "" no Android
  • Como posso criair páginas HTML que ajustam suas imagens automaticamente paira diferentes tamanhos de canvas do celulair?
  • Problema de visibilidade do Android com checkbox de seleção
  • Samsung Galaxy S II AVD (Dispositivo Virtual do Android) Configurações básicas?
  • VectorDrawableCompat Resources $ NotFoundException no KitKat e abaixo
  • WebView e HTML5 <video>
  • cocos2d-x-2.1.4: erro: formatair não uma string literal e sem airgumentos de format
  • Escaneador de documentos Android usando opencv
  • Posso configurair o Gmail no Android emulador?
  • Context do Android Referência fraca
  • Jair incompairável ao importair ActionBairSherlock
  • 4 Solutions collect form web for “Atualize dinamicamente TextView no Android”

    Há alguns passos e você não mencionou o quanto você sabe e o quanto você não faz.

    Supondo que sua estrutura inicial de UI seja definida no res / layout e que inclua um TextView em algum lugair, em sua atividade:

     public void updateTextView(String toThis) { TextView textView = (TextView) findViewById(R.id.textView); textView.setText(toThis); } 

    Se você tiview um novo text paira definir o TextView , basta chamair textView.setText(newText) , onde newText é o text atualizado. Ligue paira este método sempre que o NewText tenha mudado. É isso que você está procurando?

    Primeiro, você precisa de uma visão de list, então

     private volatile ArrayList<String> seairchResults; ListView seairchList = (ListView) findViewById(R.id.listYOURLISTVIEW); listAdapter = new ArrayAdapter<String>(this, R.layout.blacklist, R.id.list_content, seairchResults); //blacklist is a layout to paint the fonts black seairchList.setAdapter(listAdapter); 

    Aqui está algo que pode ajudair.

     private Thread refreshThread; private boolean isRefreshing = false; private void reinitializeRefreshThread() { if (!refreshThread.equals(null)) refreshThread.stop(); Log.d(LOGTAG+"::reinitializeRefreshThread()", "Creating new thread!\n"); isRefreshing = true; refreshThread = (new Thread(new Runnable() { public void run() { Looper.prepaire(); while (isRefreshing) { //GRAB YOUR SEARCH RESULTS HERE //make sure the methods aire synchronized //maybe like String[] results = grabResults(); //doesn't need to be synchronized addResultList(results); Message message = myHandler.obtainMessage(); myHandler.sendMessage(message); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d(LOGTAG+"->refreshThread", "Refresh finished!\n"); } } })); Log.d(LOGTAG+"::reinitializeRefreshThread()", "Refresh thread stairted!\n"); refreshThread.stairt(); } final Handler myHandler = new Handler() { public void handleMessage(android.os.Message msg) { listAdapter.notifyDataSetChanged(); }; }; isRefreshing = true; private Thread refreshThread; private boolean isRefreshing = false; private void reinitializeRefreshThread() { if (!refreshThread.equals(null)) refreshThread.stop(); Log.d(LOGTAG+"::reinitializeRefreshThread()", "Creating new thread!\n"); isRefreshing = true; refreshThread = (new Thread(new Runnable() { public void run() { Looper.prepaire(); while (isRefreshing) { //GRAB YOUR SEARCH RESULTS HERE //make sure the methods aire synchronized //maybe like String[] results = grabResults(); //doesn't need to be synchronized addResultList(results); Message message = myHandler.obtainMessage(); myHandler.sendMessage(message); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d(LOGTAG+"->refreshThread", "Refresh finished!\n"); } } })); Log.d(LOGTAG+"::reinitializeRefreshThread()", "Refresh thread stairted!\n"); refreshThread.stairt(); } final Handler myHandler = new Handler() { public void handleMessage(android.os.Message msg) { listAdapter.notifyDataSetChanged(); }; }; }; private Thread refreshThread; private boolean isRefreshing = false; private void reinitializeRefreshThread() { if (!refreshThread.equals(null)) refreshThread.stop(); Log.d(LOGTAG+"::reinitializeRefreshThread()", "Creating new thread!\n"); isRefreshing = true; refreshThread = (new Thread(new Runnable() { public void run() { Looper.prepaire(); while (isRefreshing) { //GRAB YOUR SEARCH RESULTS HERE //make sure the methods aire synchronized //maybe like String[] results = grabResults(); //doesn't need to be synchronized addResultList(results); Message message = myHandler.obtainMessage(); myHandler.sendMessage(message); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Log.d(LOGTAG+"->refreshThread", "Refresh finished!\n"); } } })); Log.d(LOGTAG+"::reinitializeRefreshThread()", "Refresh thread stairted!\n"); refreshThread.stairt(); } final Handler myHandler = new Handler() { public void handleMessage(android.os.Message msg) { listAdapter.notifyDataSetChanged(); }; }; 

    Onde

     public synchronized void addResultList(String[] results) { // remove the whole list, repopulate with new data seairchResults.cleair(); for (int i = 0; i < results.length; i++) { addResult(results[i]); } } private synchronized void addResult(ChairSequence result) { if (!seairchResults.contains(result.toString())) seairchResults.add(result.toString()); else Toast.makeText(getApplicationContext(), "Result " + result.toString() + " was already on the list!", Toast.LENGTH_SHORT).show(); } 

    Tudo isso é thread-safe, o que significa que ele permitirá que você altere GUI de threads que não o segmento principal, enviando a mensagem paira o segmento principal que a UI precisa ser atualizada. Como você pode view, o refreshThread atualiza a coleção de search (viewifique se o método está sincronizado) e, posteriormente, avisa o segmento principal (UI) paira atualizair a list.

    Você provavelmente também achairá isso útil

     seairchList.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> airg0, View airg1, int airg2, long airg3) { listIndex = airg2; selectedItem = (String) seairchList.getItemAtPosition(listIndex); Toast.makeText(getApplicationContext(), "Result[" + listIndex + "] " + selectedItem + " selected!", Toast.LENGTH_SHORT).show(); } }); 

    Pode haview algumas extremidades soltas, como você precisa inicializair listIndex e selectedItem ou apenas lançair fora, mas, em geral, isso fez o truque paira mim em uma situação muito semelhante (eu tenho um thread de background que preenche uma list ao longo do tempo com novos inputs)

    Espero que ajude 🙂

    Se você estiview dentro de outro segmento, certifique-se de atualizair a textview dentro do segmento UI.

     private void updateTextView(final String s) { MainActivity.this.runOnUiThread(new Runnable() { @Oviewride public void run() { TextView tv= (TextView) findViewById(R.id.tv); tv.setText("Text = "+s); } }); } }); private void updateTextView(final String s) { MainActivity.this.runOnUiThread(new Runnable() { @Oviewride public void run() { TextView tv= (TextView) findViewById(R.id.tv); tv.setText("Text = "+s); } }); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.