Android 无法使用LoaderManager查看ListFragment中的联系人列表

Android 无法使用LoaderManager查看ListFragment中的联系人列表,android,android-listview,android-listfragment,Android,Android Listview,Android Listfragment,我正在尝试创建联系人列表视图片段。代码如下: public class ContactsListFragment extends RoboListFragment implements LoaderManager.LoaderCallbacks<Cursor> { private static final int CONTACTS_LIST_LOADER = 0x01; CursorAdapter adapter; @Override

我正在尝试创建联系人列表视图片段。代码如下:

public class ContactsListFragment extends RoboListFragment implements
        LoaderManager.LoaderCallbacks<Cursor> {

    private static final int CONTACTS_LIST_LOADER = 0x01;
    CursorAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.d("onCreate", "called");

        String[] fromColumns = {ContactsContract.Contacts._ID,
                            ContactsContract.Contacts.DISPLAY_NAME,
                            ContactsContract.CommonDataKinds.Email.ADDRESS};

        int[] toViews = {   R.id.contact_list_item_id,
                            R.id.contact_list_item_name,
                            R.id.contact_list_item_email};

        getLoaderManager().initLoader(CONTACTS_LIST_LOADER, null, this);
        adapter = new SimpleCursorAdapter(
                getActivity().getApplicationContext(), R.layout.contacts_list_item,
                null, fromColumns, toViews,
                CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        setListAdapter(adapter);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        Log.d("onCreateView", "called");
        View rootView = inflater.inflate(R.layout.contacts_list_fragment, container, false);
        return rootView;
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        Log.d("onCreateLoader", "called");
        return new CursorLoader(getActivity(),
            ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, null, null, null);
    }
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        Log.d("onLoadFinished", "called");
        adapter.swapCursor(cursor);
    }
    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        Log.d("onLoaderReset", "called");
        adapter.swapCursor(null);
    }
}
公共类ContactsListFragment扩展RoboListFragment实现
LoaderManager.LoaderCallbacks{
专用静态最终int联系人列表加载程序=0x01;
游标适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(“onCreate”、“called”);
String[]fromColumns={Contacts contract.Contacts.\u ID,
Contacts contract.Contacts.DISPLAY\u NAME,
ContactsContract.CommonDataTypes.Email.ADDRESS};
int[]toViews={R.id.contact\u list\u item\u id,
R.id.联系人名单项目名称,
R.id.联系人\列表\项目\电子邮件};
getLoaderManager().initLoader(联系人列表加载程序,null,this);
适配器=新的SimpleCursorAdapter(
getActivity().getApplicationContext(),R.layout.contacts\u list\u项,
null、fromColumns、toViews、,
游标适配器。标志(寄存器、内容、观察者);
setListAdapter(适配器);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
Log.d(“onCreateView”,“called”);
视图根视图=充气机。充气(R.layout.contacts\u list\u片段,容器,false);
返回rootView;
}
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
Log.d(“onCreateLoader”,“called”);
返回新的游标装入器(getActivity(),
ContactsContract.CommonDataTypes.Email.CONTENT\u URI,null,null,null,null);
}
@凌驾
public void onLoadFinished(加载器,光标){
Log.d(“onLoadFinished”、“called”);
适配器.swapCursor(游标);
}
@凌驾
公共void onLoaderReset(加载器){
Log.d(“onLoaderReset”,“called”);
适配器.swapCursor(空);
}
}
但是,尽管所有的日志都打印出来了,也没有例外,但我在屏幕上什么也看不到

片段布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.Fragments.ContactsListFragment">

    <ListView
        android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <TextView
        android:visibility="gone"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="@string/contact_list_empty"/>

</RelativeLayout>

列表项布局:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/contact_list_item_id"/>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/contact_list_item_name"
        android:layout_below="@id/contact_list_item_id"/>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/contact_list_item_email"
        android:layout_below="@id/contact_list_item_name"/>
</RelativeLayout>

我在这里有点不知所措。我的父活动包括片段,因此:

<fragment
    android:id="@+id/contact_list_fragment"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:name="com.example.Fragments.ContactsListFragment"
    tools:layout="@layout/contacts_list_fragment"
    android:layout_below="@id/fakeView"/>


无需重写onCreateView,因为您所做的只是提供ListView和空TextView(这正是ListFragment为您所做的)。我猜您的光标是空的,并且您的空视图没有显示,因为您没有正确设置它。好的,我已经删除了该覆盖,它没有改变任何内容,正如预期的那样。我已在onCreateLoader方法中将以下投影添加到游标加载程序中:String[]投影={ContactsContract.Contacts.\u ID,ContactsContract.CommonDataTypes.Email.DISPLAY\u NAME,ContactsContract.CommonDataTypes.Email.ADDRESS};但是没有效果。好吧,我昨晚一定很累了。电话没有联系人-s