Mi dispiace se questa sembra la stessa domanda un milione di volte ... ma una ricerca su google per questo non fornisce risultati, solo un mucchio di tutorial obsoleti utilizzando managedQuery
e altre soluzioni obsolete ...come visualizzare i contatti in una listview in Android per Android api 11+
sono andato attraverso la android developer training for retrieving a contact list, ma il tutorial è incompleta e anche scaricare il codice di esempio non aiuta perché il codice di esempio è per la manipolazione lista dei contatti più avanzati (ricerca, etc.)
In ogni caso, non c'è motivo per cui non ci dovrebbe essere una soluzione semplice a questo quindi spero che qualcuno possa rispondere qui perché sono sicuro che è stato fatto un milione di volte e io sono s ne sarebbero apprezzate dozzine di altri sviluppatori Android principianti.
Ho seguito il tutorial al meglio delle mie conoscenze in assenza di contatti. Penso che la cosa più importante sia che lo TO_IDS
sia un array intero che punta a android.R.id.text1
. Sono confuso da come dovrebbe in qualche modo tirare una serie di nomi di contatti.
Inoltre, sono confuso perché una visualizzazione di testo è necessaria quando l'obiettivo finale è visualizzare un listview ... Nel tutorial, abbiamo mContactsList che è una visualizzazione elenco ... Ma popoliamo la visualizzazione elenco con un adattatore che punta a R.layout.contact_list_item
che è solo visualizzazioni di testo popolate da TO_IDS, una matrice di numeri interi.
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);
Cosa sto facendo male e come faccio a visualizzare semplicemente la lista dei contatti in una lista?
EDIT: aggiunta nel mio codice:
nella mia classe frammento:
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) {
}
}
nel mio 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>
nel mio contact_list_view xml:
<?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"/>
Nel mio contatto_ xml 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"/>
infine per contact_list_layout xml:
Cosa ho messo nella contact_list_layout.xml
? È solo uno <LinearLayout>
vuoto? Non è chiaro nel tutorial come viene gestito questo xml. Dice che questo XML è il frammento, ma se si tratta del frammento, perché abbiamo definito uno listview
già nello contact_list_view.xml
?
'FROM_COLUMNS, TO_IDS,' colonne del database mappe al testo view id (in ogni elemento della lista), vedere [ 'SimpleCursorAdapter'] (http://developer.android.com/reference/android/widget/SimpleCursorAdapter .html # SimpleCursorAdapter% 28android.content.Context,% 20int,% 20android.database.Cursor,% 20java.lang.String [],% 20int [],% 20int% 29).Qualcosa deve caricare i dati del cursore per usarli e questo non è nel tuo snippet di codice – zapl
@zapl Ho aggiunto un po 'del mio codice per mostrarti il mio 'FROM_COLUMNS' e' TO_IDS' ... Ho notato che non ho un 'contact_list_layout.xml' e ho un' activity_main.xml' ... Puoi dirmi come è strutturato il 'contact_list_layout.xml'? Puoi rivedere i miei file xml? Ho la sensazione che ci sia qualcosa che mi manca e, una volta capito, funzionerà. Il tutorial non mostra come viene scritto contact_list_layout.xml, quindi forse è lì che sto facendo degli errori? –
@zapl Sto ricevendo un'eccezione di puntatore nullo in 'mContactList.setAdapter (mCursorAdapter);' –