textview.getLineCount sempre 0 in android

Sto cercando di ridimensionare dynamicmente il mio metodo di text ma il metodo getlinecount () restituisce sempre me 0 anche dopo settext () e invalidate (). Sto utilizzando il seguente codice:

if(convertView == null){ convertView = lInflater.inflate(R.layout.listview, null); holder = new ViewHolder(); holder.text2 = (TextView)convertView.findViewById(R.id.TextView02); convertView.setTag(holder); } else{ holder = (ViewHolder)convertView.getTag(); } holder.text2.setText(arr2[position]); holder.text2.invalidate(); int lineCnt = holder.text2.getLineCount(); 

titolare è una class statica come segue:

  • Come utilizzare correttamente setProgressDrawable ()?
  • Come utilizzare lo strumento Monitor (DDMS) per eseguire il debug dell'applicazione
  • Thread che non ritorna dopo notifyall ()
  • Android come creare lo schema URL personalizzato con il formato specificato myapp: // http: //
  • Android: autocompletetextview, l'elenco suggerimenti viene visualizzato sopra la vista di text?
  • Installare le applicazioni in silenzio, con l'authorization INSTALL_PACKAGES concessa
  •   static class ViewHolder{ TextView text2; } 

    Il titolare contiene text non nullo2 e il contenuto è anche non nullo.

    Qualcuno può aiutare?

    Thanx in anticipo.

  • come hide / hide la list delle barre delle azioni su android 3?
  • Quando usare handler.post () e quando alla nuova discussione ()
  • Barra di progresso personalizzato Android
  • Il servizio di accessibilità di Android rileva la notifica
  • Non hai trovato la class "android.support.multidex.MultiDexApplication" sul path: DexPathList
  • Applicazione Android: Come caricare URl in WebView da un'altra class?
  • 6 Solutions collect form web for “textview.getLineCount sempre 0 in android”

    So che questa domanda è abbastanza vecchia, ma se qualcuno viene qui a cercare la risposta effettiva:

     holder.text2.setText(arr2[position]); holder.text2.post(new Runnable() { @Override public void run() { int lineCnt = holder.text2.getLineCount(); // Perform any actions you want based on the line count here. } }); 

    Dovrebbe essere fatto su Thread UI tramite metodo post.

     textView.post(new Runnable() { @Override public void run() { Log.v("Line count: ", textView.getLineCount()+""); } }); 

    Per risolvere questo problema applicare le seguenti righe:

     textView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (textView.getLineCount() > 1) { textView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } } }); 

    L' OnGlobalLayoutListener verrà chiamato dopo each modifica al TextView (dopo averlo misurato, disegnandolo, ..). Qui puoi prendere le modifiche al tuo TextView prima di essere disegnato sullo schermo e fare tutto ciò che ti serve.

    L'ultima row del codice è quello di rimuovere l'ascoltatore, è importnte poiché non vogliamo continuare a catturare each cambiamento di layout.

    getLineCount () vi darà il numero corretto di righe solo dopo un passaggio di layout. Ciò significa che il TextView deve essere stato disegnato alless una volta. Suppongo che a questo punto il tuo Textview non sia disegnato, quindi stai ricevendo 0 come count delle linee

    Ho fatto una class asynctask e ho fatto le mie attività relative a getLineCount () nel suo metodo onPostExecute.

     protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new myAsyncTask().execute(null, null, null); } private class myAsyncTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(final Void... params) { // It's okay to leave this as it is return null; } @Override protected void onPostExecute(final Void result) { super.onPostExecute(result); //DO YOUR TASK HERE, getLineCount(), etc. } } 

    in realtà TextView.getLineCount () si basa su TextView.mLayout.getLineCount ma TextView.mLayout è init pigro prima di onMeasure, puoi fare questo:

      if (holder.contentTV.getLayout() == null) { holder.contentTV.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { holder.contentTV.getLineCount(); holder.contentTV.getViewTreeObserver().removeOnPreDrawListener(this); return true; } }); } else { holder.contentTV.getLineCount(); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.