public class MyListFragment extends ListFragment
implements LoaderManager.LoaderCallbacks<Cursor> {
Fragment fragment = this;
SimpleCursorAdapter adapter;
// onActivityCreated initializes the adapter and the loader
public AsyncTaskLoader<Cursor> onCreateloader(int id, Bundle bundle) {
return new CustomCursorLoader(this);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
private class CustomCursorLoader extends CursorLoader {
public CustomCursorLoader(Fragment fragment) {
// get a handle to the OrmLite database helper class
databaseHelper = (DatabaseHelper) OpenHelperManager.getHelper(fragment.getActivity(), DatabaseHelper.class);
}
public Cursor loadInBackground() {
// construct the Cursor that will be used for loading results from the SQLite database
}
}
private class Task extends AsyncTask {
// pre execute
// grab some new database results from the server and repopulate the SQLite database using OrmLite
public void onPostExecute() {
fragment.getLoaderManager().restartLoader(LOADER_ID, null, fragment);
}
}
}
更新3
我想知道,就像Robby Pond在评论中提到的那样,在这里使用加载器是否是矫枉过正?
我对你的案子的一些想法:
>
加载程序有各种问题,特别是在与片段一起使用时。我可以建议您使用ViewModel,但我认为它们都基于相同的代码。您可以使用一个普通的线程,然后使用EventBus之类的东西来发布结果,但这可能有点过头了
我可以看到您忘记将类设置为静态,这意味着它们有一个对宿主类的引用。
您可以在这里尝试使用AsyncTaskLoader的通用解决方案。
也许不是重新启动,而是先销毁,然后再次调用initLoader。
AsyncTask应该只在一些小的情况下使用,在这些情况下,您不关心结果是否消失(例如,当您改变方向时)。一个很好的例子是要显示的项列表。
我有3个碎片。 每个片段都有自己的AsyncTask。 当我“启动”FragmentActivity时,将显示片段1,并执行其asynctask。但是它最近的片段(片段2,中间的片段)也启动它的AsyncTask。 我想知道是否只有当用户看到片段时才可以启动异步任务。我想如果是可能的,因为我想显示一个进度对话框(获取数据...)。现在我从数据库中得到的数据很少,但如果我有很多,我想显示一个进度对话
我的想法是,我启动一个异步任务,从Tweeter获取状态...在这里之前一切正常...但是当我遇到一些特定的tweets时,我需要用服务器上的一些信息来修改它们,这里我将进行另一个网络操作,因为我需要等待,直到我从服务器上获取信息,我做: 这是从doInBackground()方法中的allready启动的AsyncTask启动的... 我知道我可以在AsyncTask中添加方法并在doInBac
我的的一个有一个奇怪的问题。我有一个,里面有三个。到现在为止一切正常。当应用程序启动时,(带有)附加了三个片段,这样我就可以毫无问题地从一个浏览到另一个。当我尝试像这样手动(注销后)重新启动应用程序时,问题就来了: 现在,当我注销和应用程序重新启动时,应用程序崩溃,并通过一个试图从片段上访问资源。 下面是我附加的代码,即: 然后,设置:
我尝试使用onTabSelected来检测某个片段何时被选中,然后在接口的帮助下从该片段启动一个方法(下面的代码)。 但是,当使用Start方法时,在尝试更新TextView时会激发NullPointerException。start方法的代码是: 在以下行抛出异常: 是的,我已经在网上查过了所有可用的东西,但似乎没有任何东西对我有用。 非常感谢您的帮助!
我读了DialogFragment,然后把它做成这样的一对一。 在另一个SherlockFragment中,我接下来制作: 但是doPositiveClick()、doNegativeClick()方法希望是静态的,这对我来说不好。
我的Android应用程序有问题,我正在使用Android StudioIDE进行开发。差不多是当我把应用程序放在后台几分钟,或者被系统杀死,或者我混合了片段的不同布局时。我在下面放了一张图片: 如果你有其他人也写的话,我已经尝试了各种方法。提前谢谢你。