web-dev-qa-db-ja.com

Android ListViewの特定の位置にプログラムでスクロールします

ListViewの特定の位置にプログラムでスクロールするにはどうすればよいですか?

たとえば、String[] {A,B,C,D....}があり、ListViewの一番上の表示項目をString[]のインデックス21に設定する必要があります。

147
Maxime

直接スクロールの場合:

getListView().setSelection(21);

スムーズなスクロールの場合:

getListView().smoothScrollToPosition(21);
371
HandlerExploit

スクロール期間のあるSmoothScrollの場合:

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);  
60
amalBit

次のようにハンドラーにコードを配置します。

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);

乾杯!!!

9
Melbourne Lopes

OnGroupExpandListenerを設定し、onGroupExpand()を次のようにオーバーライドしました。

setSelectionFromTop()メソッドを使用します。このメソッドは、選択されたアイテムを設定し、選択をListViewの上端からyピクセルの位置に配置します。 (タッチモードの場合、アイテムは選択されませんが、適切に配置されます。)(Androidドキュメント)

    yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
    {

        @Override
        public void onGroupExpand(int groupPosition) {

            expList.setSelectionFromTop(groupPosition, 0);
            //your other code
        }
    });
6
Inet Labs

Listviewスクロールはデフォルトで一番上に配置されますが、表示されていない場合はスクロールしたいのでこれを使用します:

if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
            listView1.setSelection(position);
6
Zalak Gajjar

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. 

}
});
4
Xar E Ahmer

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);
4
Tot

ListView内の目的の位置に直接ジャンプする場合は、単に使用します

listView.setSelection(int position);

そして、listViewの目的の位置にスムーズにジャンプしたい場合は、

listView.smoothScrollToPosition(int position);

3
Vijay

これは私のために働いたものです。 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);
3

-リストを特定の位置までスクロールするだけの場合:

myListView.smoothScrollToPosition(i);

-myListViewで特定のアイテムの位置を取得する場合:

myListView.getItemAtPosition(i);

-また、このmyListView.getVerticalScrollbarPosition(i);canが役立ちます。

がんばろう :)

1
Basil Rawa

簡単なlist-view.set selection(you pos);または、共有されたprefrenceで位置を保存し、アクティビティを開始すると、そのintの設定と選択を取得できます

1
janatan