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