textview.getLineCount always 0 en android

Estoy intentando cambiar el tamaño de mi vista de texto de forma dinámica, pero el método getlinecount () siempre me devuelve 0 incluso después de settext () e invalidar (). Estoy usando el siguiente código:

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(); 

titular es una clase estática de la siguiente manera:

  static class ViewHolder{ TextView text2; } 

holder contiene text2 no nulo y el conjunto de contenido tampoco es nulo.

¿Alguien puede ayudarme?

Gracias por adelantado.

Sé que esta pregunta es bastante antigua, pero en caso de que alguien venga aquí buscando la respuesta real:

 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. } }); 

Se debe hacer en el subproceso UI por el método de publicación.

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

Para solucionar este problema, aplique las siguientes líneas:

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

Se OnGlobalLayoutListener después de cada cambio al TextView (después de medirlo, dibujarlo, …). Aquí puede ver los cambios en su TextView antes de que se TextView en la pantalla y hacer lo que necesite con él.

La última línea en el código es eliminar el oyente, es importante ya que no queremos continuar atrapando cada cambio de diseño.

getLineCount () le dará la cantidad correcta de líneas solo después de un pase de diseño. Eso significa que TextView debe haberse dibujado al menos una vez. Supongo que en este momento tu Textview no está dibujado, por lo tanto, obtienes 0 a medida que el recuento de líneas

Hice una clase asynctask e hice mis tareas getLineCount () en su método 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 { @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. } } 

en realidad, TextView.getLineCount () depende de TextView.mLayout.getLineCount, pero TextView.mLayout es un inicio lento antes de onMeasure, puedes hacer esto:

  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(); }