1

に表示される展開可能な TextView を作成したいと思いますListView。私ListView AdaptergetViewメソッドでは、「展開」ボタンを表示するために TextView が楕円形になっているかどうかを確認する必要があります。

古い Android バージョンのバグのため、EllipsizingTextViewを使用しています。

EllipsizingTextView は、 と呼ばれるメソッドを提供しますisEllipsizedgetViewEllipsizingTextView のメソッドでこのメソッドを呼び出すと、常に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