Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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
改善Android ListView中的滚动平滑度_Android_Android Listview_Smooth Scrolling - Fatal编程技术网

改善Android ListView中的滚动平滑度

改善Android ListView中的滚动平滑度,android,android-listview,smooth-scrolling,Android,Android Listview,Smooth Scrolling,我有一个AndroidListView,它在滚动时会有小的(比如说,1-5帧)口吃,大约每秒一次。我意识到许多安卓手机在动画流畅性方面存在这些问题,然而,在我的手机(运行安卓2.2的摩托罗拉A855)上,本机联系人列表的滚动非常平稳。联系人列表中的项目视图比我的列表中的项目视图更复杂,即: <RelativeLayout> <TextView /> <TextView /> </RelativeLayout> 提前谢谢 如果没有看

我有一个Android
ListView
,它在滚动时会有小的(比如说,1-5帧)口吃,大约每秒一次。我意识到许多安卓手机在动画流畅性方面存在这些问题,然而,在我的手机(运行安卓2.2的摩托罗拉A855)上,本机联系人列表的滚动非常平稳。联系人列表中的项目视图比我的列表中的项目视图更复杂,即:

<RelativeLayout>
    <TextView />
    <TextView />
</RelativeLayout>

提前谢谢

如果没有看到您的代码,很难知道为什么会发生这种情况


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

您尝试过高效适配器吗

在我看来,动画平滑的问题是由于垃圾收集器在后台运行造成的。如果您正在创建大量对象,那么您将在listview滚动中看到滞后


希望能有所帮助。

提供一些关于您的适配器的信息。您至少要阅读官方的android指南。它被称为Viewholder模式。“尝试并重新使用作为参数传递给此方法的视图,而不是每次都创建一个新的视图”。事实证明,这正是问题所在。我希望这能帮助其他认为convertView参数只是为了方便的人。我已经在问题中添加了我的原始代码,这样人们就可以看到我的错误。马克·艾利森,你是一个(奇怪的,可怕的)计算之神。如果我将
SimpleCursorAdapter
与第二个未弃用的构造函数一起使用,会怎么样?我是应该扩展它还是应该开箱即用?它将自动使用回收视图。如果覆盖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;
    }