我有一个ListFragment,我想要的行为是输入片段并看到它填充了我拥有的数据库中的数据。困难的部分是我还希望这个片段知道何时将新行添加到数据库并显示它。
目前我唯一的解决方案是在片段内以特定间隔执行更新,但我想知道是否有更有效的解决方案以及如何完成。
答案 0 :(得分:1)
您可以使用CursorLoader。它还假设您有一个ContentProvider作为应用程序的数据源,我不会在这里讨论,但如果您愿意,可以在this post中了解它们。
要将数据库数据同步到ListView,您必须做两件事:
要实现LoaderManager,只需覆盖三个必需的方法。一个用于设置光标,一个将结果提供给您的适配器。从那时起,假设您的ContentProvider正确通知任何URI更改,您将注意到适配器中的这些更改。以下是Loader代码的片段:
public class AccountsFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>{
private static final int MY_LOADER = 0;
@Override
public void onActivityCreated() {
super.onActivityCreated();
getLoaderManager.initLoader(MY_LOADER, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
switch(id){
case MY_LOADER:
return new CursorLoader(
getActivity(),
MY_URI,
MY_COLUMNS,
null,
null,
null
);
default:
throw new UnsupportedOperationException("Unknown loader id: " + id);
}
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch(loader.getId()){
case MY_LOADER:
mAdapter.swapCursor(datA);
default:
throw new UnsupportedOperationException("Unknown loader id: " + loader.getId());
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
switch(loader.getId()){
case MY_LOADER:
mAdapter.swapCursor(null);
break;
default:
throw new UnsupportedOperationException("Unknown loader id: " + loader.getId());
}
}
}
我从Udacity course学到了很多东西,从底层向上教你很多Android,如果你正在寻找一个完整的概述,我认为这非常值得你花时间。