ListView 向上滚动时卡顿冻结。

3

我有一个带有自定义CursorAdapter的ListView。它包含几百个项目。向下滚动是平滑和快速的,但是向上滚动总是冻结。我没有在UI线程上加载图像或执行任何操作。只从光标获取一些值并将其设置到TextView中。

private class EpisodesAdapter extends CursorAdapter {
        LayoutInflater inflater;
        public EpisodesAdapter(Context context) {
            super(context, null, false);
            inflater = (LayoutInflater)     context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {

            View view = inflater.inflate(R.layout.list_item_episode, parent,  false);

            view.setBackgroundResource(R.drawable.abs__list_selector_holo_light);
            return view;
        }

        @Override
        public void bindView(View view, final Context context, final Cursor cursor) {
            final String title = cursor.getString(EpisodesQuery.EPISODE_TITLE);
            final String episodeId = cursor.getString(EpisodesQuery.EPISODE_ID);
            final String time = cursor.getString(EpisodesQuery.EPISODE_PUBLISHED_AT);
            final String episodeUrl = cursor.getString(EpisodesQuery.EPISODE_URL);
            final int stateId = cursor.getInt(EpisodesQuery.EPISODE_STATE_ID);

                        ((TextView) view.findViewById(R.id.title)).setText(title);
                        ...... 
                }
}

一些可能导致此问题的想法是什么?

如果应用程序完全冻结了,那么可能会有一条logcat消息来解释问题。你在那里看到任何信息吗? - Bryan Herbst
你尝试过一般的性能优化,比如视图持有者或异步任务加载器吗? - jsmith
我认为你需要在使用完游标后关闭它。检查logcat,它可能会显示一些关于为什么冻结的信息。 - G_S
  1. Logcat中唯一的消息是Cursor window: Window is full,但我在向下滚动时也看到它,并且它可以平稳工作。
  2. 是的,我尝试过。我只从cursor中加载数据。ViewHolder没有在CursorAdapter中使用,因为它有自己的getView实现来处理它。NewView仅被调用了几次,而BindView则对每一行都进行了调用。
  3. 关闭cursor应该放在哪里?CursorAdapter会处理它,我无法在BindView中关闭它。
我不知道问题出在哪里,因为整个列表向下滚动都很好,但一旦到达末尾并尝试向上滚动,它就会冻结。这非常奇怪。
- Martin Vandzura
2个回答

1
我想我明白了。游标中的一列包含一些 blob 数据。当我从查询选择中删除此列时,它可以平稳地滚动。感谢所有的回答。

0

CursorAdapter不需要ViewHolder。newView和bindView已经处理了它。正如我所说的,向下滚动很流畅,只有当我尝试向上滚动时才会开始冻结。 - Martin Vandzura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接