Android 片段中的自定义游标适配器
我有一个片段,它利用了我创建的数据库类。我有一个名为populateListView()的方法,它使用游标适配器用数据填充ListView。我的问题是,我一直收到一个语法错误,指出“CursorAdapter是抽象的,不能实例化”。在活动中使用此代码时,我没有遇到任何问题,但它不会在片段中工作。有人知道为什么吗 以下是我的片段中的代码:Android 片段中的自定义游标适配器,android,android-fragments,Android,Android Fragments,我有一个片段,它利用了我创建的数据库类。我有一个名为populateListView()的方法,它使用游标适配器用数据填充ListView。我的问题是,我一直收到一个语法错误,指出“CursorAdapter是抽象的,不能实例化”。在活动中使用此代码时,我没有遇到任何问题,但它不会在片段中工作。有人知道为什么吗 以下是我的片段中的代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup contai
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_contacts_fragments, container, false);
inputName = (EditText)view.findViewById(R.id.inputName);
inputNumber = (EditText)view.findViewById(R.id.inputNumber);
inputEmail = (EditText)view.findViewById(R.id.inputEmail);
saveButton = (Button)view.findViewById(R.id.saveButton);
deleteAllButton = (Button)view.findViewById(R.id.deleteAllButton);
openDB();
populateListView();
return view;
}
private void openDB(){
myDB = new DBAdapter(getActivity());
myDB.open();
}
public void populateListView(){
View view = getView();
Cursor cursor = myDB.getAllRows();
String[] fromFieldNames = new String[] {DBAdapter.KEY_NAME,DBAdapter.KEY_NUMBER,DBAdapter.KEY_EMAIL};
int[] toViewIDs = new int[] {R.id.customRowContactName,R.id.customRowContactNumber,R.id.customRowRowEmail};
CursorAdapter cursorAdapter;
//***SYNTAX ERROR WITH FOLLOWING LINE***
cursorAdapter = new CursorAdapter(getActivity(),R.layout.contacts_custom_row,cursor,fromFieldNames,toViewIDs);
myList = (ListView)view.findViewById(R.id.listView);
myList.setAdapter(cursorAdapter);
}
CursorAdapter
是一个抽象类,这意味着它不能被实例化
在您的活动中,您可能正在使用SimpleCursorAdapter
,因为您的构造函数参数符合它的要求,或者您可能正在使用自己的CursorAdapter
实现
如果在您正在使用的活动
中已经起作用,则这两种方法中的任何一种都将在片段
中起作用
cursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.contacts_custom_row,
cursor, fromFieldNames, toViewIDs);
CursorAdapter
是一个抽象类,这意味着它不能被实例化
在您的活动中,您可能正在使用SimpleCursorAdapter
,因为您的构造函数参数符合它的要求,或者您可能正在使用自己的CursorAdapter
实现
如果在您正在使用的活动
中已经起作用,则这两种方法中的任何一种都将在片段
中起作用
cursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.contacts_custom_row,
cursor, fromFieldNames, toViewIDs);
是的,所以SimpleCrsorAdapter确实可以工作,但是Android告诉我它已经被弃用了。。。。SimpleCursorAdapter cursorAdapter=新的SimpleCursorAdapter(getActivity(),R.layout.contacts_custom_row,cursor,fromFieldNames,ToViewId);。。。。你知道应该用什么来代替吗?是的。该方法的文档实际上提到了为什么不应该再使用它,以及使用什么,int,android.database.Cursor,java.lang.String[],int[])。基本上是将
LoaderManager
与CursorLoader
一起使用,以确保查询是在UI线程之外执行的,并且更新后的任何查询也是在UI线程之外执行的。如果您已经在UI线程之外加载数据,则会有另一个重载构造函数使用标志。如果您不希望它在数据更新时自动重新查询,您可以使用它cursorAdapter=new simplecursorsadapter(getActivity(),R.layout.contacts_custom_行,游标,fromFieldNames,toViewIDs,0)
Last quick thing,那么我在int数组所在的构造函数中的最后一个参数中放置了什么呢?int[]
参数是您正在使用的布局文件中的视图ID数组。它是字符串[]
的关联数组。每个字符串映射到光标中的一列,其值将填充到视图中,id位于int[]
中。是的,因此SimpleCursorAdapter确实可以工作,但Android告诉我它已被弃用。。。。SimpleCursorAdapter cursorAdapter=新的SimpleCursorAdapter(getActivity(),R.layout.contacts_custom_row,cursor,fromFieldNames,ToViewId);。。。。你知道应该用什么来代替吗?是的。该方法的文档实际上提到了为什么不应该再使用它,以及使用什么,int,android.database.Cursor,java.lang.String[],int[])。基本上是将LoaderManager
与CursorLoader
一起使用,以确保查询是在UI线程之外执行的,并且更新后的任何查询也是在UI线程之外执行的。如果您已经在UI线程之外加载数据,则会有另一个重载构造函数使用标志。如果您不希望它在数据更新时自动重新查询,您可以使用它cursorAdapter=new simplecursorsadapter(getActivity(),R.layout.contacts_custom_行,游标,fromFieldNames,toViewIDs,0)
Last quick thing,那么我在int数组所在的构造函数中的最后一个参数中放置了什么呢?int[]
参数是您正在使用的布局文件中的视图ID数组。它是字符串[]
的关联数组。每个字符串映射到光标中的一列,其值将填充到视图中,id位于int[]
中。