ListViewに入力されているデータセットから取得した値に基づいてListView行を強調表示する必要があります。以下のコードに示すように、ビューバインダーを介してデータベース値に基づいてテキストビューを変更する方法を知っています。ビューバインダーから行を更新する方法はありますか?私の知る限り、更新できるのはビューバインダーからのテキストフィールドのみであり、親行の属性は更新できません。
現在SimpleCursorAdapterを使用していますが、何らかのタイプのカスタムアダプタを作成する必要があると思われます。ただし、カスタムアダプターに入ると、dbカーソルにアクセスしてフィールドを読み取り、行を強調表示するかどうかを判断できません。
明確にするために、選択されたときに行を強調表示しようとはしていません。私はそれを行う方法を知っています。また、テキストビューだけを強調表示しようとはしていません。listView行全体(または少なくともR.layout.stream XMLファイルのLinearLayout)を強調表示しようとしています。
その行を強調表示するかどうかを示すブール値がデータベースレコードにあります。あなたが与えることができるどんな入力にも感謝します!
これが私の主な活動の一部です:
cursor = db.query(DbHelper.TABLE, null, null, null, null, null, DbHelper.C_TIMESTAMP + " DESC", null);
startManagingCursor(cursor);
adapter = new SimpleCursorAdapter(this, R.layout.stream, cursor, FROM, TO);
adapter.setViewBinder(VIEW_BINDER);
listStream.setAdapter(adapter);
...
そして、ここにビューバインダーの一部があります:
static final ViewBinder VIEW_BINDER = new ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (view.getId() == R.id.textTimestamp) {
String postDate = cursor.getString(columnIndex);
((TextView) view).setText(tHandler.getRelativeLocalTime(view.getContext(),postDate));
return true;
...
アクティビティXMLレイアウトファイルの関連部分:
<ListView
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/listStream"
android:background="@color/lightGreen"
android:layout_below="@+id/streamHeader">
</ListView>