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

时间:2017-04-12 18:21:50

标签: android android-recyclerview

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

关注answers from other questions(虽然与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));
        }
    });
}

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

那么我做错了什么?

1 个答案:

答案 0 :(得分:1)

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