2017-04-12 2 views
1

Ich versuche, die Anzahl der Zeilen eines TextView in einem RecyclerView-Adapter zu zählen.Get TextView Zeilenanzahl im RecyclerView Adapter?

Nach answers from other questions (wenn auch nicht in RecyclerViews verwandt), habe ich versucht, diese zu meinen onBindViewHolder Methode:

@Override 
public void onBindViewHolder(final ViewHolder holder, int position) { 
    Message message = messages.get(position); 

    holder.textView.setText(message.getMessage()); 

    holder.textView.setVisibility(View.VISIBLE); 

    // Get the number of lines 
    holder.textView.post(new Runnable() { 
     @Override 
     public void run() { 
      int lineCount = holder.textView.getLineCount(); 

      Log.d("COUNT", String.valueOf(lineCount)); 
     } 
    }); 
} 

Aber wenn ich meine App öffnen, wird die erste RecyclerView Artikel zunächst COUNT 0 zeigen (auch wenn es hat 5 Zeilen). Wenn ich jedoch ein paar Elemente nach unten scrolle und dann zurück zum ersten Element blättere, wird die korrekte Anzahl von Zeilen angezeigt (COUNT 5).

Also, was mache ich falsch?

+0

Check http://stackoverflow.com/a/12107005/4148757 –

+0

@bhaskarkurzekar Wie funktioniert diese Lösung Leistung in einem RecyclerView beeinflussen? – user7858218

Antwort

0

textView ist ein Verweis auf die konvertierte Ansicht im Layout-Manager. Wenn run() ausgeführt wird, kann holder.textView möglicherweise in einem anderen Element verwendet werden.

AKTUALISIERT Wenn Sie schnell blättern, vielleicht ein paar Ansichten werden nicht hergestellt werden. Sie können überprüfen, ob der Text in der aktuellen Ansicht gleich Nachrichten ist.

Message message = messages.get(position); 

holder.textView.setText(message.getMessage()); 

holder.textView.setVisibility(View.VISIBLE); 

// Get the number of lines 
holder.textView.post(new Runnable() { 
    @Override 
    public void run() { 
     if (holder.textView.getText().toString().equals(message.getMessage()) { 
      int lineCount = holder.textView.getLineCount(); 
      Log.d("COUNT", String.valueOf(lineCount)); 
     } 
    } 
}); 
+0

Probieren Sie es einfach ohne den Post (Runnable) und es sagt immer noch "COUNT 0". – user7858218

+0

@ user7858218 Müssen Sie Zeilen im Text oder eine mögliche Anzahl von Zeilen des textView-Widgets zählen? –

+0

Die Anzahl der Zeilen, die auf dem Bildschirm in der Textansicht angezeigt werden. – user7858218

Verwandte Themen