java - 异步加载内容时闪烁

标签 java android asynchronous android-listview android-asynctask

我在 ListView 中异步加载从 SQLiteDatabase 查询的内容。我使用 AsyncTask,它基本上如下所示:

private final class QueryTask extends AsyncTask<Boolean, Void, Boolean> {

    @Override
    protected Boolean doInBackground(Boolean... params) {
        doQuery();

        if (querySuccessfull) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    protected void onPostExecute(Boolean boo) {
        if (boo) {
            setAdapterToListView();
        } else {
            loadEmptyView();
        }
    }
}

不过,这没什么大不了的。 但是,有一个小问题,内容不会立即加载,这会导致闪烁,我认为这非常难看。 我不知道如何“修复”,希望你能帮助我。非常感谢!

最佳答案

我希望您目前正在将所有项目添加到适配器中,然后在最后执行notifydatasetchanged()。因此,在整个适配器填满后,UI 会更新。

仅在 doQuery() 函数中,您应该在适配器中添加项目,然后为前 10 个项目(可见项目)的每个项目调用 notificationdatasetchanged() (在添加整个列表后,在可见项目之后,请调用 notificationdatasetchanged()) 。

这将为 UI 带来您想要的流畅感觉。希望对您有所帮助。

关于java - 异步加载内容时闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571313/

相关文章:

java - Spring 3 MVC - View 未解决

java - 无法在我的 Activity 中初始化 Room DB

android - 自定义 arrayadapter 组合了在同一 Activity 的不同 fragment 中使用的列表

c# - 在viewmodel的构造函数中调用async方法加载数据有警告

javascript - AngularJS错误: Cannot read property 'get' of undefined

java - 根据另一个属性获取枚举的属性

java - doubleX(String someString) 方法应根据输入字符串是否包含连续的 'x' 个字符返回 boolean 值

asp.net-core - .net Core **从不调用** "next.Invoke after the response has been sent to the client"那么如何实现符合良好实践的代码?

java - 谷歌电子表格 API : Empty all cells in sheet

java - 来自 Android 的 MySQL 请求错误