我想创建一个可扩展的 TextView,它显示在ListView
. 在我ListView
Adapter
的getView
方法中,我需要检查 TextView 是否为椭圆形以显示“展开”按钮。
由于旧 Android 版本中的错误,我正在使用EllipsizingTextView 。
EllipsizingTextView 提供了一个名为isEllipsized
. 当我getView
在 EllipsizingTextView 的方法中调用此方法时,我总是得到false
结果。正如我发现的那样,该 isEllipsized
方法仅适用于已经绘制的视图。
结果,我尝试isEllipsized
从单独的Runnable
using中调用TextView.post(Runnable runnable)
。这适用于首次加载列表项后 EllipsizingTextView 中显示的第一个项目。
但是,当我向下滚动时isEllipsized
总是返回 false。当我再次向上滚动时,isEllipsized
将为每个列表项返回正确的布尔值。
有谁知道我做错了什么?感谢您的任何提示。
这是我在一个单独的类中的 getView 方法:
private EllipsizingTextView textView;
private int position;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item, null, false);
holder.text = (EllipsizingTextView) convertView.findViewById(R.id.label);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(position + " " + this.text);
this.textView = holder.text;
this.position = position;
Runnable r = new Runnable() {
@Override
public void run() {
Log.d("tag", TestObject.this.position +
" isEllipsized " + TestObject.this.textView.isEllipsized());
}
};
holder.text.post(r);
return convertView;
}
和我的 XML:
<com.example.listviewtest.EllipsizingTextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="5"
</com.example.listviewtest.EllipsizingTextView>