以编程方式滚动到Android ListView中的特定位置

Max*_*me 150 android android-listview

如何以编程方式滚动到某个特定位置ListView

例如,我有一个String[] {A,B,C,D....},我需要将顶部可见项设置ListView为我的索引21 String[].

Han*_*oit 380

对于直接滚动:

getListView().setSelection(21);
Run Code Online (Sandbox Code Playgroud)

为了平滑滚动:

getListView().smoothScrollToPosition(21);
Run Code Online (Sandbox Code Playgroud)

  • `smoothScrollToPosition`无效,有什么建议吗? (11认同)
  • @SweetWisherツ 尝试延迟执行,例如:`listView.post(() -> listView.smoothScrollToPosition());` (2认同)

ama*_*Bit 61

对于具有滚动持续时间的SmoothScroll:

getListView().smoothScrollToPositionFromTop(position,offset,duration);

参数
position - >滚动到
偏移的位置---->滚动完成时从视图顶部到位的所需距离(以像素
为单位)duration->滚动使用的毫秒数

注意:来自API 11.

HandlerExploit的回答是我正在寻找的,但我的listview非常冗长,并且还有字母滚动条.然后我发现同样的功能也可以采取其他参数:)


编辑:(来自AFDs建议)

要定位当前选择:

int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();

mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);  
Run Code Online (Sandbox Code Playgroud)


Mel*_*pes 10

将代码放在处理程序中,如下所示,

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); 
    }
Run Code Online (Sandbox Code Playgroud)

然后调用这个方法,如,

timerDelayRunForScroll(100);
Run Code Online (Sandbox Code Playgroud)

干杯!!!


小智 7

Listview卷轴将被定位在默认情况下到上,而是要滚动,如果不可见的再使用这样的:

if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
            listView1.setSelection(position);
Run Code Online (Sandbox Code Playgroud)


小智 6

我已设置OnGroupExpandListener并覆盖onGroupExpand(),如下所示:

并使用setSelectionFromTop()方法设置所选项目并从ListView的上边缘定位选择y像素.(如果处于触摸模式,该项目将不会被选中,但它仍将被正确定位.)(android docs)

    yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
    {

        @Override
        public void onGroupExpand(int groupPosition) {

            expList.setSelectionFromTop(groupPosition, 0);
            //your other code
        }
    });
Run Code Online (Sandbox Code Playgroud)


Xar*_*mer 5

使用 UP/Down using.button 处理 listView 滚动

如果有人有兴趣使用按钮处理 listView 向上/向下一行。然后。

public View.OnClickListener onChk = new View.OnClickListener() {
             public void onClick(View v) {

                 int index = list.getFirstVisiblePosition();
                 getListView().smoothScrollToPosition(index+1); // For increment. 

}
});
Run Code Online (Sandbox Code Playgroud)


Tot*_*Tot 5

如果有人在寻找类似功能的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);
Run Code Online (Sandbox Code Playgroud)


小智 5

如果你想直接跳转到 listView 中所需的位置,只需使用

listView.setSelection(int position);

如果你想平滑地跳转到 listView 中所需的位置,只需使用

listView.smoothScrollToPosition(int position);