Articles of simplecursoradapter

SimpleCursorAdapter vs CursorAdapter?

我有一些游标与数据。 我有TextView的可见性取决于光标项的某些属性。 我使用SimpleCursorAdapter并重写getView方法。 但我实际上不使用SimpleCursorAdapter的属性。 将适配器更改为CursorAdapter并重写newView和bindView方法会更好吗?

无法恢复活动

我是新手,并试图让我的ListView刷新SQLite数据库更新后。 修改我的onResume()方法后,我没有收到编译错误。 我正在使用SimpleCursorAdapter重新查询,但它不工作。 收到的错误来自logcat,并在下面。 请指教…例子最好的帮助。 logcat的: 02-19 21:31:49.933: E/AndroidRuntime(714): java.lang.RuntimeException: Unable to resume activity {com.loginplus.home/com.loginplus.home.LoginList}: java.lang.NullPointerException 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread.access$600(ActivityThread.java:123) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.os.Handler.dispatchMessage(Handler.java:99) 02-19 21:31:49.933: E/AndroidRuntime(714): at android.os.Looper.loop(Looper.java:137) 02-19 21:31:49.933: E/AndroidRuntime(714): at […]

Android ListView刷新

我有一个Listview ,它从sqlite数据库中提取和显示数据。 数据库的第一列中的数据显示在ListView ,点击后, Activity开始显示与第一列关联的列的其余部分。 在编辑数据时,需要更新ListView以反映这一点,但是除非应用程序重新启动,否则不会显示更新。 我已经尝试在我的onResume()方法中调用notifyDataSetChanged()和startActivityForResult() onResume()方法,但这并不起作用。 我应该使用什么方法来完成当前代码中的ListView更新? 我明白一个SimpleCursorAdapter可能会被使用,我试图没有成功实现该代码。 我是新手,需要真正的代码来了解需要做什么。 public class LoginList extends Activity implements OnClickListener, OnItemClickListener { private ListView loginList; private Button webLogin; private ListAdapter loginListAdapter; private ArrayList<LoginDetails> loginArrayList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login_listview); loginList = (ListView) findViewById(R.id.loginlist); loginList.setOnItemClickListener(this); webLogin = (Button) findViewById(R.id.button3); webLogin.setOnClickListener(this); loginArrayList = new ArrayList<LoginDetails>(); loginListAdapter […]

为什么cursorLoader没有通知源数据的变化?

我有一个简单的contentProvider,一个带有ListView的布局和一个用于在Content Provider和CursorLoader中添加Items的button。 http://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html#onLoadFinished(android.content.Loader,D )参考指出 装载程序将监视数据的变化,并在此处通过新的调用向您报告。 你不应该自己监视数据。 例如,如果数据是一个Cursor,并将其放置在CursorAdapter中,则使用CursorAdapter(android.content.Context,android.database.Cursor,int)构造函数,而不传入FLAG_AUTO_REQUERY或FLAG_REGISTER_CONTENT_OBSERVER(即,使用0标志参数)。 这可以防止CursorAdapter自己观察游标,因为当发生变化时,您将得到一个新的游标在这里再次调用游标。 但是onLoadFinished方法中的Log.info行没有被执行,listView没有刷新。 这是我的(简单)代码: public class HomeActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor>{ static final String TAG = "HomeActivity"; SimpleCursorAdapter adapter; ListView listAnnunciVicini; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); listAnnunciVicini = (ListView) findViewById(R.id.lista_annunci_vicini); adapter = new SimpleCursorAdapter(this, R.layout.list_item, null, new String[] { ContentDescriptor.Annunci.Cols.ID, ContentDescriptor.Annunci.Cols.TITOLO, ContentDescriptor.Annunci.Cols.DESCRIZIONE }, new int[] { R.id.list_annunci_item_id_annuncio, […]

使用Cursor Adapter实现带多个select器的listview

在这个问题Android中讨论这个问题:过滤listview时检查错误的项目 。 总结这个问题,当使用带CursorAdapter和filter的列表视图时,在filter被删除后,被过滤的列表上选定的项目将会失去select,相反,未过滤列表中该位置的项目将被选中。 使用上面链接问题中的代码示例,我们应该在哪里放置代码来标记checkbox。 我相信它应该在CustomCursorAdapter的getView()方法中,但是我不确定。 另外,我们如何访问HashSet来保存自定义适配器类中的所有selectedIds,因为它将在保存列表的主活动中被初始化和修改。 我的活动实现ListView @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.selectfriends); Log.v(TAG, "onCreate called") ; selectedIds = new ArrayList<String>() ; selectedLines = new ArrayList<Integer>() ; mDbHelper = new FriendsDbAdapter(this); mDbHelper.open() ; Log.v(TAG, "database opened") ; Cursor c = mDbHelper.fetchAllFriends(); startManagingCursor(c); Log.v(TAG, "fetchAllFriends Over") ; String[] from = new String[] {mDbHelper.KEY_NAME}; int[] […]

Android,使用SimpleCursorAdapter来设置颜色不仅仅是string

我有一个简单的游标适配器设置在我的应用程序列表中,如下所示: private static final String fields[] = {"GenreLabel", "Colour", BaseColumns._ID}; datasource = new SimpleCursorAdapter(this, R.layout.row, data, fields, new int[]{R.id.genreBox, R.id.colourBox}); R.layout.row由两个TextView(genreBox和colourBox)组成。 而不是将TextView的内容设置为“Color”的值,我想将其背景颜色设置为该值。 我需要做什么才能做到这一点?

在ListView中保持滚动位置的同时更新SimpleCursorAdapter

我的问题:我的ListView重置其滚动位置顶部,每当我通过其(定制)SimpleCursorAdapter更新其内容。 我希望ListView在更新时保持其滚动位置。 我开始创build一个新的适配器实例,每次使用ListView.setAdapter() ,但根据这个讨论,我应该更新适配器,而不是重置它。 我无法find一种方法来正确工作的SimpleCursorAdapter。 以下是我尝试过的一些东西,省略了方法参数: – 带有新光标的SimpleCursorAdapter.changeCursorAndColumns()成功更新适配器,但仍然重置滚动位置。 – SimpleCursorAdapter.changeCursor()行为方式相同。 – SimpleCursorAdapter.swapCursor()不可用,直到API 11,我正在开发的API 8。 – SimpleCursorAdapter.notifyDataSetChanged()不会更新ListView。 (也许我错过了另一个步骤。) ListView.invalidate()不会更新ListView。 – SimpleCursorAdapter.requery()使ListView SimpleCursorAdapter.requery()空白,不推荐使用。 – 我熟悉ListView.setSelection()解决scheme,但我不希望我的ListView在更新时完全移动。 这将它捕捉到列表中的一个位置。 这似乎应该是一个普遍而简单的问题。 有人处理了吗?

在SimpleCursorAdapter中使用哪个标志?

我使用SimpleCursorAdapter将从database读取的数据发送到ListView 。 SimpleCursorAdapter有两个标志,其中一个已被弃用。 我应该总是使用FLAG_CONTENT_OBSERVER吗? 还是使用其他的而不是SimpleCursorAdapter ?

Android的SimpleCursorAdapter使用DISTINCT进行查询

这是一个有趣的问题,我感到震惊的是,在互联网上没有更多的问题。 Android的CursorAdapter是非常有用的,一旦你得到一个ContentProvider启动并学习如何使用它,但由于他们的要求_id字段作为其查询的一部分(没有它引发错误)的限制。 原因如下: 我的具体问题是,我有两个旋转器:一个旋转器应该包含数据库中唯一的“类别”名称,另一个应该填充所选“类别”(类别是列名称,在这里)的所有数据库条目。 这似乎是许多程序可能使用的非常简单的设置,不是? 试图实现第一个微调是我碰到问题的地方。 这是我想要的第一个微调的查询: SELECT DISTINCT category FROM table; 使查询在CursorAdapter上引发错误,因为_id列是查询的一部分。 将_id列添加到投影自然返回表的每一行,因为你现在也要求不同的id,每个id是不同的(根据定义)。 显然,我宁愿只看到每个类别名称一个条目。 我已经实现了一个解决方法,就是简单地进行上面的查询,然后将结果复制到ArrayAdapter中。 我之所以这个职位是看看是否有一个更优雅的解决这个奇怪的小问题,并开始讨论我可以做得更好。 备用的实施build议,如使用不同种类的控制或适配器,是非常受欢迎的。

Android:删除数据库行后如何重新查询游标刷新ListView?

这可能是一个noob问题,但我对这个SQLite-Database-Cursor-Adapter-ListView-Do-It-Properly-Stuff是个新东西。 我拥有的: 在我的MainActivity我有一个ListView 。 我使用SQLite database并使用扩展SimpleCursorAdapter的自定义适配器填充ListView 。 通过点击我的ActionBar一个项目,我激活Contextual Action Mode 。 一切工作到目前为止。 我想要的是: 通过在我的ListView item点击某个图标,相应的数据库行应该被删除, ListView应该被刷新。 我的问题: 如何正确地刷新我的Cursor和我的ListView ? 当我不在我的OnClickListener使用cursor.requery()并使用cursor = dbm.getIOIOSensorsCursor()我得到了一行CursorIndexOutOfBoundsException int state = cursor.getInt(cursor.getColumnIndex(IOIOSensorSchema.STATE)); 我的应用程序崩溃,但重新加载后,数据库已被删除,相应的ListView item不见了。 我猜崩溃必须与_position在get getView方法有关,因为_position是final 。 但是,当我使用cursor.requery()一切正常。 但是这个方法已经被废弃了,它的文档说“不要使用这个…” 。 我是一个正确编码的朋友(我还是个初学者,想要学习正确的方法,而不是快速和肮脏的),并想知道如何做到这一点。 我不知道它是否重要,但是我只在我的(非常快)的Nexus 4上testing我的应用程序。看起来没有问题刷新Cursor足够快,但我不知道它是否会在较慢的设备上工作。 万一它对你很重要我的数据库将包含约10-20行约12列。 我想这是一个非常小的数据库。 以下是我的自定义适配器的相关代码: public class IOIOSensorCursorAdapterCam extends SimpleCursorAdapter { static class ViewHolder { ImageView stateIV, removeIV; TextView nameTV, […]