我有一个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);
}
我该怎么做才能解决这个问题?
答案 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);
}
});
}