RecyclerView中TextView上的getLineCount()返回零

时间:2017-05-01 01:29:23

标签: android android-recyclerview android-adapter

我有一个RecyclerView,我需要能够检查TextView中有多少行。

我正在使用getLineCount()来获取行数,但是当我打开我的应用程序时,它将返回零(即使TextView中有10多行)。

经过一些测试后,我发现如果我向下滚动RecyclerView中的一些项目然后向上滚动到顶部,它将返回正确的行数。

以下是我的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);
}

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:3)

您需要使用OnGlobalLayoutListener上的TextView来回复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);
        }
    });
}

答案 1 :(得分:0)

在询问需要多少行之前,您需要让TextView绘制文字。

尝试

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