how to display contacts in a listview in Android for Android api 11+

前端 未结 1 1612
终归单人心
终归单人心 2020-12-01 07:11

I\'m sorry if this looks like the same question a million times...but a google search for this provides no results, just a bunch of outdated tutorials using managedQue

相关标签:
1条回答
  • 2020-12-01 07:26

    Small stripped down example for displaying the contacts name in a ListView. Below Fragment extends ListFragment which has a default layout. You don't need to specify your own. The layout for list items is also taken from Android's default layouts (android.R.layout.simple_list_item_1) which is a simple single line of text per item.

    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.ContactsContract.Contacts;
    import android.support.v4.app.ListFragment;
    import android.support.v4.app.LoaderManager.LoaderCallbacks;
    import android.support.v4.content.CursorLoader;
    import android.support.v4.content.Loader;
    import android.support.v4.widget.CursorAdapter;
    import android.support.v4.widget.SimpleCursorAdapter;
    
    public class ContactListFragment extends ListFragment implements LoaderCallbacks<Cursor> {
    
        private CursorAdapter mAdapter;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // create adapter once
            Context context = getActivity();
            int layout = android.R.layout.simple_list_item_1;
            Cursor c = null; // there is no cursor yet
            int flags = 0; // no auto-requery! Loader requeries.
            mAdapter = new SimpleCursorAdapter(context, layout, c, FROM, TO, flags);
        }
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
    
            // each time we are started use our listadapter
            setListAdapter(mAdapter);
            // and tell loader manager to start loading
            getLoaderManager().initLoader(0, null, this);
        }
    
        // columns requested from the database
        private static final String[] PROJECTION = {
            Contacts._ID, // _ID is always required
            Contacts.DISPLAY_NAME_PRIMARY // that's what we want to display
        };
    
        // and name should be displayed in the text1 textview in item layout
        private static final String[] FROM = { Contacts.DISPLAY_NAME_PRIMARY };
        private static final int[] TO = { android.R.id.text1 };
    
        @Override
        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    
            // load from the "Contacts table"
            Uri contentUri = Contacts.CONTENT_URI;
    
            // no sub-selection, no sort order, simply every row
            // projection says we want just the _id and the name column
            return new CursorLoader(getActivity(),
                    contentUri,
                    PROJECTION,
                    null,
                    null,
                    null);
        }
    
        @Override
        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
            // Once cursor is loaded, give it to adapter
            mAdapter.swapCursor(data);
        }
    
        @Override
        public void onLoaderReset(Loader<Cursor> loader) {
            // on reset take any old cursor away
            mAdapter.swapCursor(null);
        }
    }
    
    0 讨论(0)
提交回复
热议问题