これは、私が作業しているアプリケーションのListViewの右側です。
ご覧のとおりImageView
、星の表示は9つのエントリのリストに2回表示されます。
これは、これが使用するBindViewメソッドListView
ですCursorAdapter
。
@Override
public void bindView(View v, Context context, Cursor c) {
AQuery aq = new AQuery(v);
MyDatabaseHelper helper = new MyDatabaseHelper(context); //Used for various bits of text-setting. Is largely unrelated to the question.
boolean isDefault = (c.getShort(c.getColumnIndexOrThrow(MyDatabaseHelper.DEFAULT))==1);
Log.d("Binding account to view", "Entry "+currentID+"isDefault: "+isDefault);
v.setTag(isDefault);
if (isDefault) {
aq.id(R.id.favStar).visible(); //favStar defaults to GONE.
}
helper.close();
}
ご覧のとおり、データベースの列が1を読み取るかどうかをチェックしてから、ブール演算のそのビットを変数に格納します。その変数を使用して、にタグを付け、View
その変数のステータスを報告し、変数がtrueの場合にのみ星を表示します。
これは、9番目のエントリが追加される前の、入力されているリストからのログ出力です。
02-28 10:50:23.381: D/Binding account to view(20759): Entry 1isDefault: false
02-28 10:50:23.397: D/Binding account to view(20759): Entry 2isDefault: false
02-28 10:50:23.413: D/Binding account to view(20759): Entry 3isDefault: false
02-28 10:50:23.420: D/Binding account to view(20759): Entry 4isDefault: false
02-28 10:50:23.436: D/Binding account to view(20759): Entry 5isDefault: false
02-28 10:50:23.444: D/Binding account to view(20759): Entry 6isDefault: false
02-28 10:50:23.459: D/Binding account to view(20759): Entry 7isDefault: false
02-28 10:50:23.475: D/Binding account to view(20759): Entry 8isDefault: true
02-28 10:50:23.498: D/Binding account to view(20759): Entry 1isDefault: false
02-28 10:50:23.506: D/Binding account to view(20759): Entry 2isDefault: false
02-28 10:50:23.530: D/Binding account to view(20759): Entry 3isDefault: false
02-28 10:50:23.553: D/dalvikvm(20759): GC_CONCURRENT freed 122K, 2% free 11069K/11271K, paused 3ms+15ms, total 43ms
02-28 10:50:23.553: D/Binding account to view(20759): Entry 4isDefault: false
02-28 10:50:23.577: D/Binding account to view(20759): Entry 5isDefault: false
02-28 10:50:23.592: D/Binding account to view(20759): Entry 6isDefault: false
02-28 10:50:23.600: D/Binding account to view(20759): Entry 7isDefault: false
02-28 10:50:23.616: D/Binding account to view(20759): Entry 8isDefault: true
(9番目のエントリを追加すると、ログ出力に「エントリ9isDefault:false」が追加されます。)
デバッグログにスターが表示されるべきではないことを示すスターがリストに表示される理由を誰かに教えてもらえますか?ListFragment
これListView
が表示されるものも、収容するアクティビティも、R.id.favStarListFragment
への参照をどこにも作成しません。
FindViewById()
さらに詳しく説明すると、AQueryを使用せずに(とを使用して)これを試しましsetVisible()
たが、結果はデバッグログに表示される期待される結果に変更されませんでした。バグのある星は常に最初の位置に表示され、リスト内の他の星が表示されることになっている場合にのみ表示されます。(DatabaseHelperクラスは、ISDEFAULT = 1で何かを設定する前に、データベース内のすべてのアイテムをISDEFAULT = 0に設定します。)奇妙なことに、ADTがマスター/詳細フロー用に提供するテンプレートを使用すると、このバグは私のNexus7では複製できません。しかし、私のギャラクシーネクサスとエミュレーターの両方で見つけることができます。