ListView
カスタムを使用して情報SimpleCursorAdapter
を表示する があります。各行ListView
には 3 つのTextView
項目があります。
アプリケーションの性質上、読者は、行項目に表示されるテキストを読みやすくするためにフォント サイズを変更したい場合と、変更したくない場合があります。
私が達成したいのは、このTextView
アイテムのテキスト サイズを から更新する必要なく更新する方法bindView()
です。
これが私が現在行っている方法です:
ステップ 1: textSize を変更する必要があることをアダプターに通知します。
public void setAdjustTextSize(int size) {
switch (size) {
case ArticleViewFragment.FONT_SIZE_SMALL:
mTitleTextSizeRes = R.dimen.title_size_small;
mCategoryTextSizeRes = R.dimen.description_size_small;
mDescripTextSizeRes = R.dimen.description_size_small;
break;
case ArticleViewFragment.FONT_SIZE_MEDIUM:
mTitleTextSizeRes = R.dimen.title_size_medium;
mCategoryTextSizeRes = R.dimen.description_size_medium;
mDescripTextSizeRes = R.dimen.description_size_medium;
break;
case ArticleViewFragment.FONT_SIZE_LARGE:
mTitleTextSizeRes = R.dimen.title_size_large;
mCategoryTextSizeRes = R.dimen.description_size_large;
mDescripTextSizeRes = R.dimen.description_size_large;
break;
case ArticleViewFragment.FONT_SIZE_EXTRA_LARGE:
mTitleTextSizeRes = R.dimen.title_size_extra_large;
mCategoryTextSizeRes = R.dimen.description_size_extra_large;
mDescripTextSizeRes = R.dimen.description_size_extra_large;
break;
default:
break;
}
}
mTitleTextSizeRes、mCategoryTextSizeRes、および mDescripTextSizeRes は、カスタム アダプターのインスタンス変数です。
ステップ 2: bindView() 中に textSize を設定します。
@Override
public void bindView(View view, Context arg1, Cursor arg2) {
ViewHolder mHolder = (ViewHolder) view.getTag();
//Some other initialization
mHolder.category.setTextSize(TypedValue.COMPLEX_UNIT_PX, mResources.getDimension(mCategoryTextSizeRes));
mHolder.title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mResources.getDimension(mTitleTextSizeRes));
mHolder.description.setTextSize(TypedValue.COMPLEX_UNIT_PX, mResources.getDimension(mDescripTextSizeRes));
}
さて、それはうまくいきますが、私が議論したい点がいくつかあります:
1- convertView が再利用されるたびに、実行時に TextSize を変更しているという事実。これを行うのが最善であり、そうすれonNewView
ば convertViews はすでに新しいセットサイズを使用しています。ただし、ほとんどの場合、アダプターは既に作成されており、ビューは既に存在するため、そうしようとすると失敗します。
2 - コードが実行されているためbindView
、既存のビューでは変更がすぐには表示されず、スクロール中のある時点で、ユーザーには古いテキスト サイズのビューがいくつか表示され、新しいテキスト サイズのビューがいくつか表示されるという事実サイズ。例 画像添付。
そうは言っても、アダプターを再初期化するようなことを達成できることを望んでいましたが、アダプターを最初から作成する以外に、その方法がわかりません。notifyDataSetChanged を呼び出してみましたが、何もしませんでした
何か案は?