ListView
の特定の位置にプログラムでスクロールするにはどうすればよいですか?
たとえば、String[] {A,B,C,D....}
があり、ListView
の一番上の表示項目をString[]
のインデックス21に設定する必要があります。
直接スクロールの場合:
getListView().setSelection(21);
スムーズなスクロールの場合:
getListView().smoothScrollToPosition(21);
getListView().smoothScrollToPositionFromTop(position,offset,duration);
パラメーター
position->スクロールする位置
offset ---->スクロール終了時のビューの上部からの位置のピクセル単位の望ましい距離
duration->スクロールに使用するミリ秒数
注: API 11から。
HandlerExploitの答えは私が探していたものでしたが、私のリストビューは非常に長く、アルファベットスクローラーもあります。それから、同じ関数が他のパラメーターも取ることができることを発見しました:)
編集:(AFDの提案から)
現在の選択を配置するには:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
次のようにハンドラーにコードを配置します。
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
lstView.smoothScrollToPosition(YOUR_POSITION);
} catch (Exception e) {}
}
}, time);
}
そして、このメソッドを次のように呼び出します
timerDelayRunForScroll(100);
乾杯!!!
OnGroupExpandListenerを設定し、onGroupExpand()を次のようにオーバーライドしました。
setSelectionFromTop()メソッドを使用します。このメソッドは、選択されたアイテムを設定し、選択をListViewの上端からyピクセルの位置に配置します。 (タッチモードの場合、アイテムは選択されませんが、適切に配置されます。)(Androidドキュメント)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
Listview
スクロールはデフォルトで一番上に配置されますが、表示されていない場合はスクロールしたいのでこれを使用します:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
UP/Downボタンを使用したリストビュースクロールの処理
誰かがボタンを使用してlistViewを1行上/下に処理することに興味がある場合。その後。
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Gmailアプリのような同様の機能を探している人がいる場合、
Listviewスクロールはデフォルトで上部に配置されます。ヒントをありがとう。 amalBit。差し引くだけです。それでおしまい。
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
int h1 = mDrawerList.getHeight();
int h2 = header.getHeight();
mDrawerList.smoothScrollToPosition(h2-h1);
}
}, 1000);
ListView内の目的の位置に直接ジャンプする場合は、単に使用します
listView.setSelection(int position);
そして、listViewの目的の位置にスムーズにジャンプしたい場合は、
listView.smoothScrollToPosition(int position);
これは私のために働いたものです。 amalBitとMelbourne Lopesによる回答の組み合わせ
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.smoothScrollToPositionFromTop(YOUR_POSITION, h1/2 - h2/2, 500);
} catch (Exception e) {}
}
}, time);
}
次に、このメソッドを次のように呼び出します。
timerDelayRunForScroll(400);
-リストを特定の位置までスクロールするだけの場合:
myListView.smoothScrollToPosition(i);
-myListViewで特定のアイテムの位置を取得する場合:
myListView.getItemAtPosition(i);
-また、このmyListView.getVerticalScrollbarPosition(i);
canが役立ちます。
がんばろう :)
簡単なlist-view.set selection(you pos);または、共有されたprefrenceで位置を保存し、アクティビティを開始すると、そのintの設定と選択を取得できます