に表示される展開可能な TextView を作成したいと思いますListView。私ListView AdapterのgetViewメソッドでは、「展開」ボタンを表示するために TextView が楕円形になっているかどうかを確認する必要があります。
古い Android バージョンのバグのため、EllipsizingTextViewを使用しています。
EllipsizingTextView は、 と呼ばれるメソッドを提供しますisEllipsized。getViewEllipsizingTextView のメソッドでこのメソッドを呼び出すと、常に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>