0

ListActivityデータベースクエリからデータを取得する があります。また、単純なカーソル アダプターを拡張するカスタム アダプターもあります。

カスタマイズされたコンテンツを表示するためにnewView、 bindView メソッドをオーバーライドしました。

ビューの各要素には次のものがあります。

  1. TextViewタイトルを含む
  2. ImageView星の数を含む - 表示される画像は、データベースから取得した値に基づいて変更されます
  3. ボタン - ボタンのテキストはクリック (お気に入り/お気に入りにする) で変化し、データベース更新イベントをトリガーします。

私の問題はこれです-スクロールするListViewと、行った変更が消えたように見えます..たとえば、最初のアイテムがお気に入りとしてマークされ、リストがスクロールされます...最初のアイテムに戻ると、テキストが元に戻ります内部的にデータベースが更新されていますが、以前の値に戻ります。

notifyDatasetChanged()データベースの変更をアダプターに通知する必要があるため、このケースには適していないことを読みました。メソッドを使用しようとしていますreQuery()が、どこに配置すればよいかわかりません。

ボタンreQuery()のメソッドに配置する必要がありますか? onClickそうでない場合、どこに配置する必要がありますか?

4

3 に答える 3

1

あなたが使用しているアダプターには、getViewメソッドが必要です..リストがスクロールされるたびに、ビュー内のすべてのlistItemに対してこのgetViewメソッドが呼び出されます。getView メソッドで確認してください。ビューが動的に生成されていること。


クリックまたは変更された値をチェックする必要があります。


スクロールせずにリストを更新するには、listView.getAdapter().notifyDataSetChanged() を呼び出す必要があります。

次のリンクを確認してください。ここで、リストビューを適切に使用するための完全なコードについて言及しました。これを使用して、リストビューの動作を実現できます。アニメーションも埋め込むことができます。

ListView の背景を変更する - 奇妙な動作

この助けを願っています:)

于 2011-02-04T12:10:54.857 に答える
0

BaseAdapter を拡張した場合は、データが変更された後、 listView.setAdapter() を呼び出し、 getView() でビューのデータも更新します。

于 2011-02-04T12:00:06.217 に答える
0

Use SetListAdapter with ArrayAdapter to display the list. Use ConvertView to avoid inflating View.

if (convertView==null)
{
     //inflate your list
}
于 2011-02-04T12:09:48.127 に答える