Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android上将列表视图滚动到特定位置?_Java_Android_Android Listview - Fatal编程技术网

Java 如何在Android上将列表视图滚动到特定位置?

Java 如何在Android上将列表视图滚动到特定位置?,java,android,android-listview,Java,Android,Android Listview,我的名单上有公共汽车时刻表。 我想使用SmoothScroll根据当地时间滚动列表直到下一个日程表。 有时清单上有40个项目,我不知道下一个日程安排在什么位置。 如何知道此项目的位置并使用SmoothScroll 如果你需要,我可以提供更多细节 编辑2: 我试过这个: 覆盖此方法的自定义适配器: public int nextTimePosition; @Override public int getItemViewType(int position) { String item =

我的名单上有公共汽车时刻表。 我想使用SmoothScroll根据当地时间滚动列表直到下一个日程表。 有时清单上有40个项目,我不知道下一个日程安排在什么位置。 如何知道此项目的位置并使用SmoothScroll

如果你需要,我可以提供更多细节

编辑2:

我试过这个:

覆盖此方法的自定义适配器:

public int nextTimePosition;

@Override
public int getItemViewType(int position) {

    String item = getItem(position);

    return (item.equalsIgnoreCase(nextTime)) ? CHANGE_BACKGROUND : TYPE_ITEM_NORMAL;
}
如果item等于nextTime,我将保存位置以进入listView类并设置smoothscroll,但没有成功

编辑3:

我在SimonSays的帮助下解决了这个问题

在list.post()之前,我进行了一个查询,将下一个计划放入一个变量中,并使用下面的代码滚动

当他找到下一个时间表时,这个方法停止了。 但是我想把时间表放在列表的中心,所以我做了一些调整

以下内容供日后参考:

lvUtil.post(new Runnable() {

            @Override
            public void run() {
                int visibleChildCount = (lvUtil.getLastVisiblePosition() - lvUtil.getFirstVisiblePosition()) + 1;
                int finalIndex = uteis.indexOf(getNext()) + (int) Math.floor((visibleChildCount / 2));
                lvUtil.smoothScrollToPosition(finalIndex);
            }
        });

嗯,你得想办法弄明白。这就是它的样子。我想你需要一些不同的逻辑

List<Item> myListData = ...;
for(Item item : myListData){
    if(isNextItem(Item){
        listView.smoothScrollToPosition(myListData.indexOf(item));
        break;
    }
}
List myListData=。。。;
用于(项目:myListData){
if(isNextItem(项目){
smoothScrollToPosition(myListData.indexOf(item));
打破
}
}

我的意思是,就像你尝试过什么一样?我已经可以计算出下一个日程安排。但是通过适配器,我只有在项目在屏幕上可见时才有位置,并且它不能解决问题。我如何从适配器的列表中获取项目?如何将它们放入?请参见编辑3,你的答案帮助我它不起作用!我在getView()中使用>自定义适配器