Прошу прощения, если это похоже на один и тот же вопрос в миллион раз ... но поиск в Google для этого не дает результатов, просто куча устаревших руководств используя managedQuery
и другие устаревшие решения ...как отображать контакты в списке в Android для Android api 11+
Я прошел через android developer training for retrieving a contact list, но учебник неполный, и даже загрузка образца кода не помогает, потому что примерный код предназначен для более продвинутых манипуляций со списком контактов (поиск и т. д.).)
В любом случае нет причин, по которым не должно быть простого решения, поэтому я надеюсь, что кто-то может ответить здесь, потому что я уверен, что это было сделано миллион раз, и я Думаю, десятки других начинающих разработчиков Android оценят это.
Я слежу за учебником, насколько мне известно, контакты не появляются. Я думаю, самое главное, что TO_IDS
представляет собой целочисленный массив, который указывает на android.R.id.text1
. Я смущен тем, как это должно каким-то образом вытащить массив имен контактов.
Кроме того, я смущен, почему текстовое представление необходимо, когда конечная цель состоит в отображении списка ... В учебнике у нас есть mContactsList, который представляет собой представление списка ... Но мы заполняем представление списка с помощью адаптер, указывающий на R.layout.contact_list_item
, который является только текстовым просмотром, заполненным TO_IDS, массивом целых чисел.
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);
Что я делаю неправильно и как просто отображать список контактов в списке?
EDIT: добавление в мой код:
в моем классе фрагмент:
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) {
}
}
в моем 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>
в моем 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"/>
В моем контакте_ list_item XML
<?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"/>
, наконец, для contact_list_layout XML:
Что я положил в contact_list_layout.xml
? Это просто пустой <LinearLayout>
? В учебнике не ясно, как обрабатывается этот xml. Он говорит, что этот XML является фрагментом, но если это фрагмент, почему мы определили listview
уже в contact_list_view.xml
?
'FROM_COLUMNS, TO_IDS,' столбцы карты базы данных в текстовом просматривать идентификаторы (в каждом элементе списка), см [ 'SimpleCursorAdapter'] (http://developer.android.com/reference/android/widget/SimpleCursorAdapter .html # SimpleCursorAdapter% 28android.content.Context,% 20int,% 20android.database.Cursor,% 20java.lang.String [],% 20int [],% 20int% 29).Что-то нужно загрузить данные курсора, чтобы использовать это, а это не в вашем фрагменте кода. – zapl
@zapl. Я добавил некоторые из моего кода, чтобы показать вам мои 'FROM_COLUMNS' и' TO_IDS' ... Я заметил, что у меня нет a 'contact_list_layout.xml', и у меня есть' activity_main.xml' ... Можете ли вы рассказать мне, как структурирован 'contact_list_layout.xml'? Можете ли вы просмотреть мои xml-файлы? У меня такое чувство, что я чего-то не хватает, и как только я подумаю, что одна часть его будет работать. В учебнике не показано, как написано contact_list_layout.xml, так что, возможно, именно там я ошибаюсь? –
@zapl Я получаю исключение с нулевым указателем в 'mContactList.setAdapter (mCursorAdapter);' –