我想使用片段显示联系人列表,
我从这里下载示例contact_picker
在此示例中,他们使用 ListFragment,我已将其更改为 Fragment 和所有其他必要的更改,然后我运行应用程序但它不显示联系人列表,我如何使用 Fragment 完成
编辑:
我只是在下面的两个文件中进行了更改
ContactsListFragment.java
package com.codinguser.android.contactpicker;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AlphabetIndexer;
import android.widget.ListView;
import android.widget.SectionIndexer;
public class ContactsListFragment extends Fragment implements
LoaderCallbacks<Cursor>{
private OnContactSelectedListener mContactsListener;
private SimpleCursorAdapter mAdapter;
private String mCurrentFilter = null;
ListView listView;
String TAG = getClass().getSimpleName();
private static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID,
Contacts.DISPLAY_NAME,
Contacts.HAS_PHONE_NUMBER,
Contacts.LOOKUP_KEY
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_contacts_list, container, false);
listView = (ListView) view.findViewById(R.id.list);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
getLoaderManager().initLoader(0, null, this);
mAdapter = new IndexedListAdapter(
this.getActivity(),
R.layout.list_item_contacts,
null,
new String[] {ContactsContract.Contacts.DISPLAY_NAME},
new int[] {R.id.display_name});
listView.setAdapter(mAdapter);
listView.setFastScrollEnabled(true);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mContactsListener = (OnContactSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnContactSelectedListener");
}
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
Uri baseUri;
if (mCurrentFilter != null) {
baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
Uri.encode(mCurrentFilter));
} else {
baseUri = Contacts.CONTENT_URI;
}
String selection = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ Contacts.DISPLAY_NAME + " != '' ))";
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Log.v(TAG, "Name = "+ContactsContract.Contacts.DISPLAY_NAME);
return new CursorLoader(getActivity(), baseUri, CONTACTS_SUMMARY_PROJECTION, selection, null, sortOrder);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
class IndexedListAdapter extends SimpleCursorAdapter implements SectionIndexer{
AlphabetIndexer alphaIndexer;
public IndexedListAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to, 0);
}
@Override
public Cursor swapCursor(Cursor c) {
if (c != null) {
alphaIndexer = new AlphabetIndexer(c,
c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME),
" ABCDEFGHIJKLMNOPQRSTUVWXYZ");
Log.v(TAG, "data = "+ c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
return super.swapCursor(c);
}
@Override
public int getPositionForSection(int section) {
return alphaIndexer.getPositionForSection(section);
}
@Override
public int getSectionForPosition(int position) {
return alphaIndexer.getSectionForPosition(position);
}
@Override
public Object[] getSections() {
return alphaIndexer == null ? null : alphaIndexer.getSections();
}
}
}
fragment_contacts_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:drawSelectorOnTop="false" />
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:gravity="center"
android:text="Nothing to see here!"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>