como exibir contatos em um listview no Android para Android api 11+

Me desculpe se isso parece a mesma pergunta um milhão de vezes ... mas uma pesquisa no Google por isso não fornece resultados, apenas um monte de tutoriais desatualizados usandomanagedQuery e outras soluções obsoletas ...

Eu passei peloTreinamento de desenvolvedor do Android para recuperar uma lista de contatos, mas o tutorial está incompleto e até mesmo fazer o download do código de amostra não ajuda porque o código de amostra é para manipulação de lista de contatos mais avançada (pesquisa, etc.)

Em qualquer caso, não há razão para que não haja uma solução simples para isso, então espero que alguém possa responder aqui porque tenho certeza que isso já foi feito um milhão de vezes e tenho certeza que dezenas de outros desenvolvedores iniciantes do Android gostaria de receber isso.

Eu segui o tutorial para o melhor do meu conhecimento por nenhum contato aparecer. Eu acho que a maior coisa é que oTO_IDS é um array inteiro que aponta paraandroid.R.id.text1. Estou confuso como isso é suposto de alguma forma puxar uma matriz de nomes de contato.

Além disso, estou confuso porque uma visão de texto é necessária quando o objetivo final é exibir um listview ... No tutorial, temos mContactsList que é uma visão de lista ... Mas nós preenchemos a exibição de lista com um adaptador apontando paraR.layout.contact_list_item que é apenas textviews preenchidos por TO_IDS, uma matriz de inteiros.

mContactsList = (ListView) getActivity().findViewById(R.layout.contact_list_view);
mCursorAdapter = new SimpleCursorAdapter(
            getActivity(),
            R.layout.contact_list_item,
            null,
            FROM_COLUMNS, TO_IDS,
            0);
mContactList.setAdapter(mCursorAdapter);

O que estou fazendo errado e como simplesmente exibo a lista de contatos em uma lista?

EDIT: adicionando no meu código:

na minha classe de fragmento:

public class MyFragment extends Fragment implements
    LoaderManager.LoaderCallbacks<Cursor>{

private static final String[] FROM_COLUMNS = {ContactsContract.Contacts.DISPLAY_NAME_PRIMARY };
private static final int[] TO_IDS = {android.R.id.text1};
ListView mContactList;
private SimpleCursorAdapter mCursorAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    return inflater.inflate(R.layout.contact_list_view,container,false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);
    mContactsList = (ListView) getActivity().findViewById(R.layout.contact_list_view);
    mCursorAdapter = new SimpleCursorAdapter(
            getActivity(),
            R.layout.contact_list_item,
            null,
            FROM_COLUMNS, TO_IDS,
            0);
    mContactList.setAdapter(mCursorAdapter);

}

@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
    return null;
}

@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {

}

@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {

}
}

no meu activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
            android:id ="@+id/contactListFragment"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:name="preamble.myapp.MyFragment"/>
</LinearLayout>

no meu xml contact_list_view:

<?xml version="1.0" encoding="utf-8"?>
<ListView   xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@android:id/list"
            android:layout_height="match_parent"
            android:layout_width="match_parent"/>

No meu xml contact_list_item

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@android:id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

finalmente para xml contact_list_layout:

O que eu coloco nocontact_list_layout.xml? Isto é apenas um vazio<LinearLayout>? Não está claro no tutorial como esse XML é tratado. Ele diz que esse XML é o fragmento, mas se é o fragmento, por que definimos umlistview já nocontact_list_view.xml?

questionAnswers(1)

yourAnswerToTheQuestion