1

我想创建一个可扩展的 TextView,它显示在ListView. 在我ListView AdaptergetView方法中,我需要检查 TextView 是否为椭圆形以显示“展开”按钮。

由于旧 Android 版本中的错误,我正在使用EllipsizingTextView 。

EllipsizingTextView 提供了一个名为isEllipsized. 当我getView在 EllipsizingTextView 的方法中调用此方法时,我总是得到false结果。正如我发现的那样,该 isEllipsized方法仅适用于已经绘制的视图。

结果,我尝试isEllipsized从单独的Runnableusing中调用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>
4

0 回答 0