Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每当数据发生更改时,是否创建新的SimpleCorsorAdapter?_Java_Android_Simplecursoradapter - Fatal编程技术网

Java 每当数据发生更改时,是否创建新的SimpleCorsorAdapter?

Java 每当数据发生更改时,是否创建新的SimpleCorsorAdapter?,java,android,simplecursoradapter,Java,Android,Simplecursoradapter,我刚开始Android开发,一直在开发一个简单的应用程序,它使用ListActivity、SQLiteDatabase和SimpleCorsorAdapter 在Android开发者网站上,有一个示例项目演示了SimpleCursOradapter的用法。从实现来看,每当底层数据库由于某些用户操作而被修改时,ListActivity显式调用以下函数来“刷新”列表: private void fillData(){ //从数据库中获取所有行并创建项目列表 mNotesCursor=mDbHelpe

我刚开始Android开发,一直在开发一个简单的应用程序,它使用
ListActivity
SQLiteDatabase
SimpleCorsorAdapter

在Android开发者网站上,有一个示例项目演示了
SimpleCursOradapter
的用法。从实现来看,每当底层数据库由于某些用户操作而被修改时,
ListActivity
显式调用以下函数来“刷新”列表:

private void fillData(){
//从数据库中获取所有行并创建项目列表
mNotesCursor=mDbHelper.fetchAllNotes();
开始管理光标(mNotesCursor);
//创建一个数组以指定要在列表中显示的字段(仅标题)
String[]from=新字符串[]{NotesDbAdapter.KEY_TITLE};
//以及要将这些字段绑定到的字段数组(在本例中仅为text1)
int[]to=newint[]{R.id.text1};
//现在创建一个简单的光标适配器并将其设置为显示
SimpleCursorAdapter注释=
新的SimpleCursorAdapter(此,R.layout.notes_行,mNotesCursor,from,to);
setListAdapter(注释);
}
看起来每次都会创建一个新的
SimpleCursorAdapter
,并使用
setListAdapter()
绑定到视图。这是最好/最干净的实现吗?Android网站上的这一点让它有了很大的可信度,但是我查看了
CursorAdapter
文档,发现有一个
changeCursor()
方法似乎比上面的方法更适合于更干净的实现,但我只是不确定这可能是什么样子


也许我只是无缘无故地烦恼,但我来自C/C++世界,每次从数据库中插入/删除一行时都会看到创建的这个“新”对象似乎有点笨手笨脚。

是的,你是对的。你可以看到很多次。对于在onResume中始终创建列表时可能不会产生任何问题的小列表。但那不是好的风格。您可以使用cursor.changeCursor()或adapter.notifyDataSetChanged()。

SimpleCursorAdapter应始终只创建一次…当基础数据库发生更改时,没有必要创建适配器…而不是创建全新的适配器…changeCursor()或requery()是最佳选择。我还想知道他们为什么这样做。我决定重构代码,使
SimpleCursorAdapter
实例现在是
ListActivity
类的成员,并在
onCreate()
方法中实例化(使用空光标)。然后,每当数据集发生更改时(或第一次需要填充列表时),我都会使用所有实用程序函数重新查询数据库并返回一个新的
游标
实例。然后调用活动上的
startManagingCursor()
方法和适配器上的
changecoursor()
方法,传递新创建的游标对象。