Articles of android cursoradapter

这个为ListView定制的CursorAdapter是否为Android正确编码?

我从未对自定义CursorAdapter上的代码感到满意,直到今天我决定复习它并修复一个困扰我很长时间的小问题(有趣的是,我的应用程序的用户都没有报告过这样的问题)。 这是我的问题的一个小描述: 我的自定义CursorAdapter覆盖了newView()和bindView()而不是getView()就像我看到的大多数示例一样。 我在这两种方法之间使用ViewHolder模式。 但我的主要问题是我为每个列表项使用的自定义布局,它包含一个ToggleButton 。 问题是当列表项视图滚出视图然后滚动回视图时,按钮状态不会保留。 存在这个问题是因为当按下ToggleButton并且它总是拉动相同的数据时, cursor从未意识到数据库数据已更改。 我单击ToggleButton时尝试重新查询光标并解决了问题,但速度非常慢。 我已经解决了这个问题,我将全class发布在这里进行审核。 我已经针对这个特定问题彻底评论了代码,以便更好地解释我的编码决策。 这段代码对你来说好看吗? 你会以某种方式改进/优化或改变它吗? PS:我知道CursorLoader是一个明显的改进,但我暂时还没有时间处理这么大的代码重写。 这是我在路线图中的一些东西。 这是代码: public class NotesListAdapter extends CursorAdapter implements OnClickListener { private static class ViewHolder { ImageView icon; TextView title; TextView description; ToggleButton visibility; } private static class NoteData { long id; int iconId; String title; String description; int position; } […]

如何获取Android Contact缩略图

我有一个listview适配器,我在newView方法中尝试以下内容: @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { final LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(layout, parent, false); long contactId = Long.valueOf(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))); String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); boolean hasPhone = Boolean.parseBoolean(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); String thumbnailUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI)); TextView name_text = (TextView) v.findViewById(R.id.name_entry); if (name_text != null) { name_text.setText(contactName); } name_text.setTag(new Contact(contactId, hasPhone)); ImageView thumbnail […]

如何使用从主表加载数据的CursorLoader从子表中检索数据?

我的应用程序正在使用CursorLoader从主表加载数据。 在CursorAdapter的帮助下,数据将显示在ListView中。 ListView中显示的视图还需要子表中的数据。 表的关系是一对多的。 如果我在查询期间连接两个表,则组合记录将与子记录一样多,因此在ListView ,它将在主表中为一个记录显示多个项目。 如果我不加入表,我不确定在CursorLoader通过游标传递数据后检索子记录的最佳方法是什么。 有人能帮帮我吗?

SimpleCursorAdapter替代方案

我正在使用不推荐使用的SimpleCursorAdapter来显示从Cursor到ListView的数据。 我添加了额外的参数0 ,它删除了dreprecated警告,但我想使用更好的方式来显示数据。 我已经阅读了有关Loader ,但不知道如何实现它。 什么是下面代码的更好的替代品? 如何将此代码转换为使用Loader? Cursor c = mDbHelper.getAllRecords(); startManagingCursor(c); //this is also deprecated String[] from = new String[] { “Name” }; int[] to = new int[] { R.id.text1 }; SimpleCursorAdapter names = new SimpleCursorAdapter(this, R.layout.names_row, c, from, to, 0); setListAdapter(names);

在Android中使用CursorAdapter进行ORMLite

我正在修改我的Android应用程序以使用ORMLite,它目前使用了许多CursorAdapter,我非常想保留它以尽量减少编码。 我不是100%肯定但是看起来当ORMLite在db中创建一个id字段时,它总是使用id ,而CursorAdapter需要_id 。 可以使用如下查询来解决此问题: select id as _id …… 但是Dao.queryRaw()方法返回一个列表,而不是Cursor,所以我这样做的方法是打开另一个SQLiteOpenHelper数据库连接并使用rawQuery() 。 这有效,但是有没有更好的方法呢? 拥有两个独立的数据库连接似乎有点过头了,以后可能会存在麻烦。

如何设置CursorAdapter(Context context,Cursor c,int flags)以使其与CursorLoader一起使用?

谷歌文档指出不要使用CursorAdapters第一个构造函数, CursorAdapter(Context context, Cursor c) 只有两个选项, CursorAdapter(Context context, Cursor c, boolean autoRequery) 这说 允许控制自动重新查询的构造函数。 建议你不要使用它,而是使用CursorAdapter(Context,Cursor,int)。 使用此构造函数时,将始终设置FLAG_REGISTER_CONTENT_OBSERVER 和 CursorAdapter(Context context, Cursor c, int flags)` 这说它是推荐的构造函数。 问题是这里只有两个标志用于最后一个构造函数, FLAG_AUTO_REQUERY (int 1)和FLAG_REGISTER_CONTENT_OBSERVER (int 2)。 使用FLAG_AUTO_REQUERY没有意义,因为我现在使用CursorLoader来在后台管理它并更新它。 使用FLAG_REGISTER_CONTENT_OBSERVER ,它表示使用CursorLoader时不需要它。 现在我问,我传递CursorAdapter(Context context, Cursor c, int flags)是什么整数CursorAdapter(Context context, Cursor c, int flags)以使其与我的CursorAdapter一起正常工作? 让我担心的是如何正确管理旧光标。 我不确定这样做的正确方法。 如果我使用FLAG_REGISTER_CONTENT_OBSERVER ,那么我必须对onContentChanged()做一些事情,但是当我在LoaderManager使用swapCursor()时,由于光标没有关闭,我只能做adapter.swapCursor(cursor).close() 。 但是这会与CursorAdapter onContentChanged()冲突吗? 目标是不会导致任何内存泄漏并且效率很高。

CursorAdapter bindView优化

当重写ArrayAdapter我知道使用这样的模式是正确的: if(view != null){ …create new view setting fields from data }else return view; //reuse view 使用CursorAdapters的这种模式也是正确的吗? 我的问题是我有一个根据光标字段可以是红色或蓝色的文本颜色,所以我不希望在具有需要蓝色字段的单元格上出现红色等错误。 我的bindView代码是这样的: if(c.getString(2).equals(“red”)) textView.setTextColor(); else textView.setTextColor(); 如果我重复使用视图,我可以确定红色是红色,而蓝色是蓝色吗?

Android:如何使用CursorAdapter?

我有一个数据库,一个ListView和一个扩展CursorAdapter的CustomCursorAdapter 。 菜单按钮将项添加到数据库。 我希望ListView更新并显示此更改。 通常情况下,在我转到主屏幕并重新打开应用程序之前,它不会显示此新项目。 每当我添加一个新项时,我最终通过调用cursor.requery()或mCustomCursorAdapter.changeCursor(newCursor)来完成它的工作,但是当我在CursorAdapter构造函数中将autoRequery设置为false时,它的工作原理相同。 当autoRequery设置为false时,为什么会正确更新? 我正确使用CursorAdapter吗? 使用数据库更新列表的标准方法是什么? autoRequery有什么作用?

ListView使用两个cursoradapters?

我有一些代码对数据库执行两个查询并返回两个游标对象。 有什么方法可以组合这两个游标,以便所有ListView从两个游标中获取数据?

Android – 如何在getView中获取bindView中的位置?

在CursorAdapter getView()中,有一个参数position所以我可以检查该position ,我怎么能在bindView()上做同样的事情,它在BindView没有position参数。 目前我正在重写newView() , bindView()和getView() ,我读取和听到的都是坏的,要么覆盖getView()或newView()和getView() 。 谢谢。