如何摆脱每次我恢复活动时出现的空视图屏幕



我有一个SimpleCursorAdapter和一个列表在我的主要活动。我已经设置了一个emptyView,当数据库中没有项目时显示。但是AsyncTask每次为onResume创建一个新的列表。所以在列表加载前,我得到了一小段时间的emptyView屏幕。现在我需要AsyncTask作为数据查询必须在单独的线程上运行。但是我不喜欢每次都弹出空视图。我在下面附上了AsyncTask和onResume方法。两者都在编译。我该怎么做呢?

class GetItems extends AsyncTask<Object, Void, Cursor> {
    DbHelper dbHelper = new DbHelper (MainActivity.this);
    @Override
    protected Cursor doInBackground(Object... params) {
        dbHelper.open();
        return dbHelper.getAllItems();
    }
    @Override
    protected void onPostExecute(Cursor result) {
        adapter.changeCursor(result);
        dbHelper.close();
    }
}
@Override
protected void onResume() {
    super.onResume();
    new GetItems().execute((Object[]) null);
}

问题似乎是一个线程的事情,在那里你发射的AsyncTask和你的onResume完成,然后你的视图是空白的,而你正在等待AyncTask完成。

想到的一个修复是在Activity生命周期的早期启动AsyncTask(例如onCreate或onStart方法),这可能会让你在第一次加载时及时得到结果。

你可以存储检索到的结果,如果用户只是导航离开,然后回来没有活动被销毁,你可以加载旧的列表,然后刷新它一旦你检索到更新的一个使用AsyncTask。

编辑另一个简单的修复是在AsyncTask的onPreonPostExecute方法中放置一个进度对话框,这将使UI线程阻塞,直到结果被检索到,但是进度对话框的闪烁可能比空白屏幕

更不和谐。

如果使用ListFragment,则可以在任务启动时调用setListShown(false),这将显示一个加载微调器。在任务端,调用setListShown(true),然后调用setEmptyText(),根据任务的结果放置一些错误消息或空消息。

或者简单的开关可见性:

class GetItems extends AsyncTask<Object, Void, Cursor> {
    DbHelper dbHelper = new DbHelper (MainActivity.this);
    @Override
    protected void onPreExecute() {
        myListView.setVisibility(View.GONE)
    }
    @Override
    protected Cursor doInBackground(Object... params) {
        dbHelper.open();
        return dbHelper.getAllItems();
    }
    @Override
    protected void onPostExecute(Cursor result) {
        adapter.changeCursor(result);
        myListView.setVisibility(View.VISIBLE);
        dbHelper.close();
    }
}
@Override
protected void onResume() {
    super.onResume();
    new GetItems().execute((Object[]) null);
}

相关内容

  • 没有找到相关文章

最新更新