プログラムで特定の位置までスクロールするにはどうすればよいListViewですか?
たとえば、私はを持っているString[] {A,B,C,D....}ので、の一番上の可視アイテムListViewをのインデックス21 に設定する必要がありString[]ます。
プログラムで特定の位置までスクロールするにはどうすればよいListViewですか?
たとえば、私はを持っているString[] {A,B,C,D....}ので、の一番上の可視アイテムListViewをのインデックス21 に設定する必要がありString[]ます。
回答:
直接スクロールの場合:
getListView().setSelection(21);スムーズにスクロールするには:
getListView().smoothScrollToPosition(21);smoothScrollToPosition機能していません、何か提案がありますか?
                    listView.post(() -> listView.smoothScrollToPosition());
                    getListView().smoothScrollToPositionFromTop(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()を次のようにオーバーライドしました。
選択されたアイテムを設定し、ListViewの上端からyピクセルの選択を配置するsetSelectionFromTop()メソッドを使用します。(タッチモードの場合、アイテムは選択されませんが、適切に配置されます。)(android docs)
    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);Gmailアプリのような同様の機能を探している人がいる場合、
リストビューのスクロールは、デフォルトで上に配置されます。ヒントをありがとう。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);.buttonを使用した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. 
}
});これは私のために働いたものです。amalBitとメルボルンロペスによる回答の組み合わせ
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);listViewのスクロール位置を正確に定義するには、次の2つが必要です。
現在のlistViewスクロール位置を取得するには:
int firstVisiblePosition = listView.getFirstVisiblePosition(); 
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.listViewのスクロール位置を設定するには:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo.. 
listView.scrollTo(0,-topEdge);私はこの解決策を見つけ、2つの異なるボタンを使用して上下にスクロールできるようにしました。
@Nepsterで提案されているように、getFirstVisiblePosition()およびgetLastVisiblePosition()を使用してプログラムでスクロールを実装し、現在の位置を取得します。
final ListView lwresult = (ListView) findViewById(R.id.rds_rdi_mat_list);
    .....
        if (list.size() > 0) {
            ImageButton bnt = (ImageButton) findViewById(R.id.down_action);
            bnt.setVisibility(View.VISIBLE);
            bnt.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(lwresult.getLastVisiblePosition()<lwresult.getAdapter().getCount()){
                        lwresult.smoothScrollToPosition(lwresult.getLastVisiblePosition()+5);
                    }else{
                        lwresult.smoothScrollToPosition(lwresult.getAdapter().getCount());
                    }
                }
            });
            bnt = (ImageButton) findViewById(R.id.up_action);
            bnt.setVisibility(View.VISIBLE);
            bnt.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(lwresult.getFirstVisiblePosition()>0){
                        lwresult.smoothScrollToPosition(lwresult.getFirstVisiblePosition()-5);
                    }else{
                        lwresult.smoothScrollToPosition(0);
                    }
                }
            });
        }