获取 RecyclerView 适配器中的 TextView 行数?

use*_*218 6 android android-recyclerview

TextView我正在尝试计算RecyclerView 适配器中a 的行数。

根据其他问题的答案(尽管与 RecyclerViews 无关),我尝试将其添加到我的onBindViewHolder方法中:

@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));
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是当我打开我的应用程序时,第一个 RecyclerView 项目将首先显示COUNT 0(即使它有 5 行)。但是,当我向下滚动几个项目,然后向上滚动回第一个项目时,它将显示正确的行数 ( COUNT 5)。

那么我做错了什么?

Vla*_*nov 2

textView是对布局管理器中转换视图的引用。run()执行时,holder.textView可能在另一个项目中使用。

更新

如果快速滚动,某些视图可能无法准备好。您可以检查当前视图中的文本是否等于消息。

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));
        }
    }
});
Run Code Online (Sandbox Code Playgroud)