0

これは、私が作業しているアプリケーションのListViewの右側です。

ここには2つの星があります。 1つだけ存在する必要があります。

ご覧のとおり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では複製できません。しかし、私のギャラクシーネクサスとエミュレーターの両方で見つけることができます。

4

1 に答える 1

1

falseの場合、favStarビューを非表示にすることはありませんisDefault。要素がtrueに設定されていて、ビューを表示すると、もう一度非表示にするまで星が表示されます。ビューが再利用されると、想定されていなくても星が表示されます。ネクサス7の画面は携帯電話よりも高いため、これを行うのに十分な要素がない可能性があるため、ネクサス7には表示されません。とにかく、コードを次のようなものに変更すると、修正されるはずです。

if (isDefault) {
  aq.id(R.id.favStar).visible(); //favStar defaults to GONE.
} else {
  //set favStar to View.GONE here
}
于 2013-03-05T01:48:05.603 に答える