4

ネイティブカレンダーのアジェンダと同じように、カレンダーのアジェンダを表示する必要があるアプリケーションを開発しています。さまざまなイベントを表示するリストビューがあります(注:質問のコンテキストでは、イベントはシステムのエンティティです)。この画面に「今日」ボタンを表示したい。ユーザーがこのボタンをクリックすると、現在の日のスケジュールの最初のイベントが画面の上部に表示されるまで、イベントがスクロールされることになっています。この問題は、今日から予定されているイベントが非常に少ないために画面全体に表示されない場合に発生します。次に、リストビューは、カレンダーの最後のイベントが一番下になるまでスクロールします。これは通常、今日の最初のイベントを上に置くという望ましい効果が達成されないことを意味します。

これをどのように行うことができるかについての提案はありますか?最後にいくつかの空白の要素を追加することを考えましたが、これは醜い回避策のようです。さらに、挿入する要素の数を示す特別なデバイス固有の計算が必要になります。

編集
コメントで要求されたようにいくつかのコードを追加する
実際には、このコードが誰かを驚かせるかどうかはわかりませんが、:

public void onTodayClicked(View target) {
  // calculate the indexOf. It works and is not related to the question
  if (indexOf >= 0) {
     ListView list = (ListView) findViewById(R.id.events_list_view);
     list.setSelection(indexOf);
  }
}

質問への回答を支援するためにレイアウトの定義が重要かどうかはわかりませんが、そう思う場合は追加することもできます。

4

1 に答える 1

0

これは、次の 2 つの方法で実現できます。

  1. SmoothScrollToPositionFromTopメソッドを呼び出す
  2. setSelectionFromTopメソッドを呼び出す

SmoothScroll メソッドを使用する方が優れています。なぜなら、実際にトランジションがスムーズに行われるからです。つまり、実際にスクロールされるということです。唯一の欠点は、API レベル 11 以降でしか利用できないことです。

setSelectionFromTop メソッドは API レベル 1 以降で機能しますが、スムーズにスクロールする代わりに、行にジャンプします。

行を表示するためだけに画面の上部に配置する必要がない場合は、API レベル 8 呼び出しである SmoothScrollToPosition を使用することもできます。


これらのメソッドにリストの最初の位置を指定すると、うまく機能します。(あなたの説明から、おそらく最後の位置を計算していると思いますが、確信が持てません)。

于 2011-12-29T20:09:28.310 に答える