当我的列表视图没有填充数据库数据时,有什么更好的方法来显示进度指示器?
我使用assynctask找到了一些如何执行此操作的示例,但就我而言,我使用的是Loader
/ CursorLoader
。
public class TestActivity extends SherlockFragmentActivity implements
LoaderCallbacks<Cursor> {
SimpleCursorAdapter mAdapter;
ListView mListView;
private static final String[] UI_BINDING_FROM = new String[] {
TestDBAdapter.KEY_NAME, TestDBAdapter.KEY_ICON };
private static final int[] UI_BINDING_TO = new int[] { R.id.text, R.id.icon };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_Test);
mListView = (ListView) findViewById(R.id.listview);
mAdapter = new TestAdapter(getApplicationContext(),
R.layout.list_item_Test, null, UI_BINDING_FROM,
UI_BINDING_TO, 0);
mListView.setAdapter(mAdapter);
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri = ContentProviderTest.CONTENT_URI;
CursorLoader cursorLoader = new CursorLoader(
this,
uri,
null,
null,
null,
null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}
一种可能的解决方案是创建一个扩展ListFragment
的新类并使用setListShown()
方法,但我不知道这是否是解决此问题的最佳方法。
由于
答案 0 :(得分:13)
在布局文件中添加一个小的ProgressBar,其可见性设置为“已消失”。在创建CursorLoader之前,将其可见性设置为“可见”。它会出现。在onLoadFinished中,将ProgressBar可见性设置为“已消失”。它将消失,你的ListView将加载。
我会使用小型进度条。要了解有关此内容的更多信息,请参阅android.widget.ProgressBar的参考文档。
BTW,可见性由View.setVisibility控制。
答案 1 :(得分:0)
除了正确的答案:在onLoadFinished()
进行此项检查是个好主意:
if (cursor.getCount() > 0) {
getView().findViewById(R.id.loadingPanel).setVisibility(View.GONE);
getView().findViewById(android.R.id.list).setVisibility(View.VISIBLE);
}
否则,如果依赖你的curstom Service
用数据填充数据库,则光标可能为空,结果将没有进度条,也不会显示带有项目的列表。
答案 2 :(得分:0)
我在listView中有一个costumCursorAdapter。
我还有一个cursorLoader来在数据库中更改数据时交换costumCursorAdapter。 DB数据由用户发起的搜索输入。
这些建议都没有奏效,Google没有帮助 - 一旦设置为可见,任何进度条都没有停止 -
i.e. progress_bar.setVisibility(View.Gone);
最终,作为一个简单的&#39;仅限于现在&#39; sulotion -
int count = 0
。
每次搜索都会重置为0(在按钮的onClick
方法中)。bindView
中,在此代码块的底部 - 我使用count ++
启动了计数。在代码块的顶部,我检查计数是否达到4.如果是,我隐藏进度条:
if (count==4){
pb.setVisibility(View.GONE);
}
这样,当customAdapter绑定第4个视图时,我知道停止进度条是合理的。
我的名单上的项目从不少于4个。
希望这有助于某人。