に表示される展開可能な 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>