Android 片段中的自定义游标适配器

Android 片段中的自定义游标适配器,android,android-fragments,Android,Android Fragments,我有一个片段,它利用了我创建的数据库类。我有一个名为populateListView()的方法,它使用游标适配器用数据填充ListView。我的问题是,我一直收到一个语法错误,指出“CursorAdapter是抽象的,不能实例化”。在活动中使用此代码时,我没有遇到任何问题,但它不会在片段中工作。有人知道为什么吗 以下是我的片段中的代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup contai

我有一个片段,它利用了我创建的数据库类。我有一个名为populateListView()的方法,它使用游标适配器用数据填充ListView。我的问题是,我一直收到一个语法错误,指出“CursorAdapter是抽象的,不能实例化”。在活动中使用此代码时,我没有遇到任何问题,但它不会在片段中工作。有人知道为什么吗

以下是我的片段中的代码:

    @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[]
中。