カスタム ListAdapter を使用する派生 ListActivity にイベントのリストを表示します。今日に最も近いイベントに移動したい「今日」ボタンがあります-簡単です-setSelection(n)を呼び出すだけです。
しかし、そのアイテムを簡単にハイライトしたり、フラッシュしたり、何らかの形でユーザーの注意を引き付けたりしたいと思います。
その理由は、たとえば 100 個のアイテムのリストのうち、一度に 10 個のアイテムが画面に表示されている場合、表示されている 10 個のアイテムの一番上にあるアイテムにジャンプしたかどうかがすぐにはわからないためです。表示されている10の一番下のアイテム、または画面のほぼ中央にあるアイテム(私のアプリでは、選択したアイテムを画面の中央で強調表示することを実際に望んでいますが、それは別のタスクです)。「常に一番上のアイテム」というルールでも、100番にジャンプすると崩れてしまい、画面の一番上のアイテムが91番になった。
私は午前中ずっとグーグルでした。ここに私が試したことのいくつかがあります。
onCreate(...) 中:
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setSelector(android.R.color.darker_gray);
リスト内の項目に触れると問題なく動作しますが、「今日」ボタン (setSelection(n) を呼び出す) を使用すると、リストはすぐに項目にスクロールしますが、項目が灰色で強調表示されません。
private void FocusToday()
{
int today = getItemClosestToToday();
this.setSelection(today);
getListView().getSelectedView().setBackgroundColor(Color.RED);
getListView() が null を返しています。
public void onCreate(Bundle savedInstanceState)
{
...
m_ListView = this.getListView();
}
private void FocusToday()
{
int today = getItemClosestToToday();
this.setSelection(today);
View view = m_ListView.getSelectedView();
view.setBackgroundColor(Color.RED);
ビューはヌルです。
余談ですが、私は頭を悩ませながら、以前にこの動作を見た場所を考えようとしていました-それはAndroidアプリでしたか? アイフォンアプリ?ウェブアプリ?それからそれは私を襲った - それはスタックオーバーフローでここにある! 回答へのリンクをクリックすると、オレンジ色が消える前に、回答が約 0.5 秒間オレンジ色で強調表示されます。それが私のアプリで探している動作です!
編集:アイテムが最初から画面上にある場合、次のように動作しますが、最初からアイテムが画面外にある場合は役に立ちません。
View view = m_ListView.getChildAt(today);
view.setBackgroundColor(Color.RED);
今日が表示可能なアイテムの数を超えた場合、View は null です。getFirstVisiblePosition() を見つけたとき、何かに取り組んでいると思いました。残念ながら、この場合:
this.setSelection(today);
int firstVisible = m_ListView.getFirstVisiblePosition();
firstVisible は、今日が範囲または可視項目内の数値であるか、範囲外であるかにかかわらず、常に 0 です。notifyDataSetChanged を追加しても違いはありません。
this.setSelection(today);
getListAdapter().notifyDataSetChanged();
int firstVisible = m_ListView.getFirstVisiblePosition();
firstVisible はまだ 0 です。