2017-05-01 2 views
0

J'ai un RecyclerView et je dois être capable de vérifier combien de lignes il y a dans un TextView. J'utilise getLineCount() pour obtenir le nombre de lignes, mais quand j'ouvre mon application, il renverra zéro (même s'il y a plus de 10 lignes dans le TextView). Après quelques tests, j'ai découvert que si je fais défiler quelques éléments dans RecyclerView et que je redescends ensuite en haut, cela retournera le bon nombre de lignes.getLineCount() sur TextView dans RecyclerView retournant zéro

Voici la partie pertinente de mon adaptateur RecyclerView:

public void onBindViewHolder(ViewHolder holder, int position) { 
    Post post = data.get(position); 

    holder.textView.setText(post.getDescription()); 

    int linecount = holder.textView.getLineCount(); 

    Log.d(TAG, "Number of lines is " + linecount); 
} 

Que puis-je faire pour résoudre ce problème?

Répondre

2

Vous devez utiliser OnGlobalLayoutListener sur TextView d'avoir le rappel des appels onLayout():

public void onBindViewHolder(ViewHolder holder, int position) { 
    Post post = data.get(position); 
    holder.textView.setText(post.getDescription()); 

    holder.textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      holder.textView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      int linecount = holder.textView.getLineCount(); 
      Log.d(TAG, "Number of lines is " + linecount); 
     } 
    }); 
} 
+0

Ce sera tiré seulement pour les éléments initiaux qui sont rendus ... Ce ne sera pas tiré pour l'élément recyclé .. Il est préférable d'utiliser sur predrawlistener –

0

Vous devrez laisser le TextView dessiner le texte avant de demander combien de lignes il faut.

Essayez

public void onBindViewHolder(ViewHolder holder, int position) { 
    Post post = data.get(position); 

    holder.textView.setText(post.getDescription()); 
    holder.textView.post(new Runnable() { 
     @Override 
     public void run() { 
      int linecount = holder.textView.getLineCount(); 
      Log.d(TAG, "Number of lines is " + linecount); 
     } 
    }); 
} 
+0

Juste essayé cela. Renvoie toujours le zéro initialement. – user7945363