提高Android ListView中的滚动平滑度

cha*_*ker 8 android smooth-scrolling android-listview

我有一个Android ListView,它有小的(比如1-5帧)口吃,因为它滚动,大约每一秒左右.我意识到许多Android手机在动画平滑性方面存在这些问题,但是,在我的手机上(运行Android 2.2的摩托罗拉A855),原生联系人列表滚动得相当顺利.联系人列表中的项目视图比列表中的项目视图更复杂,即:

<RelativeLayout>
    <TextView />
    <TextView />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我只希望实现与原生联系人列表一样好的平滑性.看来这应该可以在没有优化本机代码的情况下实现,但也许我错了.

我尝试了一些事情:我进一步简化了项目视图,并尝试以编程方式而不是XML格式化它.我也尝试改变我对项目点击事件的反应方式,根据以下链接:

http://groups.google.com/group/android-developers/browse_thread/thread/7dc261a6b382ea74?pli=1

这些事情似乎都没有对性能产生任何影响.

我可以在我的应用程序中做些什么来提高性能?我希望将此应用程序部署到多个手机上,因此在我的情况下,更改手机设置或生根设备不是一个选项.这是我的适配器类的getView方法:

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater flater = (LayoutInflater)context.getSystemService(ListActivity.LAYOUT_INFLATER_SERVICE);
        layout = flater.inflate(R.layout.song_view, parent, false);
        TextView first = (TextView)layout.findViewById(R.id.firstLine);
        TextView second = (TextView)layout.findViewById(R.id.secondLine);

        Thing t = array.get(position);
        first.setText(t.title);
        second.setText(t.name);
        return layout;
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Mar*_*son 6

如果没有看到您的代码,很难知道为什么会这样.

但是,要查看的一个地方是ListAdapter中的getView()方法(假设您使用的是自定义适配器).尝试并重新使用作为此方法的参数传递的视图,而不是每次都创建一个新视图.在这种方法中也不要做太重的事情(例如网络呼叫),实际上尽量使其尽可能地精益求精,以获得最佳性能.

  • "尝试并重新使用作为此方法的参数传递的视图,而不是每次都创建一个新视图".事实证明这正是问题所在.我希望这有助于其他人认为convertView参数只是为了方便.我已经将原始的,破碎的代码添加到问题中,以便人们可以看到我的错误.Mark Allison,你是一个(奇怪的,可怕的)计算神. (2认同)