- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建应用程序以通过外部 Web 服务将电影数据添加到内部数据库并显示电影列表作为 ListFragment
中的主要 Activity ,另一个 Activity 负责搜索功能。
ListFragment
使用 LoaderManager
从数据库中获取数据。此 fragment 还使用 setRetainInstance(true)
保留。
我遇到的问题是,当我导航到搜索、向数据库添加内容并通过按 后退按钮
返回到 ListFragment
时,它没有刷新,即添加的电影是不显示。
一些重要的事情:
ContentProvider
,所以我在 onCreateLoaderMethod
中手动从我的数据库中检索 Cursor。ListFragment
使用自定义 CursorAdapter
作为其 View 。代码如下:
package com.mp.movieplanner;
import android.app.Activity;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import com.mp.movieplanner.data.DataManager;
public class MovieListFragment extends ListFragment
implements LoaderManager.LoaderCallbacks<Cursor> {
public static String TAG = MovieListFragment.class.getSimpleName();
private OnMovieSelectedListener mCallback;
private DataManager mDataManager;
private MovieCursorAdapter mAdapter;
public interface OnMovieSelectedListener {
public void onMovieSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.i(TAG, "onAttach(Activity)");
mDataManager = ((MoviePlannerApp)activity.getApplication()).getDataManager();
try {
mCallback = (OnMovieSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnMovieSelectedListener");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate(Bundle)");
final int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1
: android.R.layout.simple_list_item_1;
setRetainInstance(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.i(TAG, "onActivityCreated(Bundle)");
super.onActivityCreated(savedInstanceState);
mAdapter = new MovieCursorAdapter(getActivity(), null, 0);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public void onStart() {
super.onStart();
Log.i(TAG, "onStart()");
if (getFragmentManager().findFragmentById(R.id.movie_details_fragment) != null) {
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
}
@Override
public void onResume() {
super.onResume();
Log.i(TAG, "onResume()");
}
@Override
public void onDetach() {
super.onDetach();
Log.i(TAG, "onDetach()");
mCallback = null;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Notify the parent activity of selected item
if (mCallback != null) {
mCallback.onMovieSelected(position);
// Set the item as checked to be highlighted when in two-pane layout
getListView().setItemChecked(position, true);
}
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getActivity()) {
@Override
public Cursor loadInBackground() {
return mDataManager.getMovieCursor();
}
};
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
mAdapter.swapCursor(null);
}
@Override
public void onPause() {
Log.i(TAG, "onPause()");
super.onPause();
}
@Override
public void onStop() {
Log.i(TAG, "onStop()");
super.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy()");
}
}
最佳答案
我会建议:
@Override
public void onResume() {
super.onResume();
Log.i(TAG, "onResume()");
getLoaderManager().restartLoader(0, null, this);
}
关于java - CursorLoader 不刷新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24564920/
我有两个具有 1:n 关系的表,我正在使用内容提供程序和 cursorloader。 如何进行连接查询以使用游标加载器?我可以在内容提供程序中使用 rawSql 以某种方式破解它,但如何在游标加载器构
我有一个 CursorLoader 从本地 SQLite 数据库加载数据。 SQLite 中的数据实际上是远程 API 响应的缓存副本,所以我会在 SQLite 数据出现时启动异步刷新由 Cursor
正在寻找在 CursorLoader 上查询(或执行搜索功能)的简单方法...我尝试了 SearchView 并且可以加载数据,但是一旦我尝试搜索,应用程序就会崩溃。 .有什么想法吗? package
我尝试使用 CursorLoader,但我不明白如何填写参数。 对于我的应用程序,我需要在一列中观察该值是否为 false 并获取该行的 id。 String[] projection =
我正在创建应用程序以通过外部 Web 服务将电影数据添加到内部数据库并显示电影列表作为 ListFragment 中的主要 Activity ,另一个 Activity 负责搜索功能。上面提到的 Li
我在调试空指针异常时遇到了一些困难。 E/AndroidRuntime( 1760): java.lang.RuntimeException: Unable to instantiate applic
我正在尝试从联系人中查询昵称和 SIP 地址。我遇到的问题是它们都存储在 DATA1 列中。所以当我运行查询时,我只检索昵称。检索它们并将它们传递到下面的 SimpleCursorAdapter 的方
我已经实现了我的自定义 ContentProvider,它有几个 URI: 主要的: //Return all items, uriType = ALLITEMS String BASEURI = "
在以下情况下如何合并游标加载器以获得一个游标加载器。我不止一个地调用内容提供者来创建我的数据库适配器以与简单的游标适配器一起使用。请看下面我的代码。 @Override public Loader o
我构建了一个可以显示我所有联系人的 Android 应用程序。这是我的 Cursor 的样子: public Cursor getAllContacts() { CursorLoader cl
好吧,我很困惑。两者有什么区别?我一直在使用导入到 Assets 文件夹中的预制数据库,并在我的 ListView 中使用图像,并且在向下滚动时遇到内存不足的错误。我阅读了不同的处理方法,但可以真正理
我刚开始使用新的 cursorLoader,但遇到了问题。以下代码只是为了了解 cursorLoader 的工作原理,但我不断得到: 当我恢复此 Activity 时,“正在尝试重新查询已关闭的游标”
我需要实现分页列表,它使用 Loader 从 ContentProvider 获取 Cursor。我有页脚,当用户单击它时 - 我需要将下一条记录添加到列表中。 如何使用 Loader 刷新列表中的数
我有两个 1:1 关系的表,我正在使用内容提供程序和游标加载器。 我将如何进行连接查询以使用游标加载器?我可以在内容提供程序中使用 rawSql 以某种方式破解它,但我无法在游标加载器构造函数中进行操
在我的应用程序中,我想显示我放在资源文件中的应用程序列表。我解析 XML(资源)文件,然后将值保存在 SQLiteDatabase 中。我在 ContentProvider 中实现了我的数据库。我想知
我在 ListFragment(位于 ViewPager 内)中有一个 CursorLoader 用于查询数据库。我有一个该数据库的内容提供者,我已经验证了它的工作原理。 问题是这样的:当应用程序首次
我在我的应用程序中广泛使用 Cursors 来加载和偶尔从数据库写入信息。我已经看到 Honeycomb 和 Compatibility Package 具有新的 Loader 类,旨在帮助以“好的”
我正在开发一个客户端 android 应用程序,该应用程序将从 URL 检索数据并将其保存在本地数据库中。我熟悉使用 SQLiteDatabase对于这个操作。 当我阅读 SimpleCursorAd
首先,我尝试使用 fts3 sqlite 表在 Android 上进行搜索,但它不起作用,因为它默认不支持括号。 我注意到,CursorLoader()在执行时会自动将选择参数(where子句)放在括
使用CursorLoader时应该在哪里处理查询结果(耗时的任务)? 最佳答案 使用AsyncTask从游标加载数据并在onPostExcute方法(uiThread)中返回值,当你多次调用任务时取消
我是一名优秀的程序员,十分优秀!