ContentProvider ANDROID CLUB 2015 Сегодня Android Lab: Контакты 1. ContentProvider 2. SimpleCursorAdapter 3. Cursor 4. LoaderManager 5. CursorLoader Demo A. ContentProvider - склад Типы ContentProvider Browser.BookmarkColumns CalendarContract ContactsContract – склад овощей UserDictionary MediaStore.Audio, MediaStore.Video DocumentsContract Settings B. SimpleCursorAdapter – логистический центр Что делает SimpleCursorAdapter? 1. Что отправить ? ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHOTO_URI 2. В чем отправить? Item_contact.xml 3. Чего куда поставить в посылке? R.id.tvName, R.id.ivImage SimpleCursorAdapter 1. Что отправить? ContactsContract.Contacts.PHOTO_URI ContactsContract.Contacts.DISPLAY_NAME SimpleCursorAdapter: код 1. Что отправить? String[] tovari = {ContactsContract.Contacts.PHOTO_URI, ContactsContract.Contacts.DISPLAY_NAME}; SimpleCursorAdapter 2. В чем отправить? listitem_contact.xml SimpleCursorAdapter: код 2. В чем отправить? <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="75dp" android:layout_height="75dp" android:src="@drawable/arbuz" android:id="@+id/ivImage" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Дыня" android:textSize="24dp" android:id="@+id/tvName" /> </LinearLayout> SimpleCursorAdapter 3. Чего куда поставить в посылке? R.id.ivImage R.id.tvName SimpleCursorAdapter: код 3. Чего куда поставить в посылке? int[] sxema = {R.id.ivImage, R.id.tvName}; SimpleCursorAdapter Context – this (место) int (layout) - R.layout.listitem_contact (каробка) Cursor – null (камаз арбузами и дыней) String[] – tovari int[] - sxema SimpleCursorAdapter: код SimpleCursorAdapter adapter; adapter = new SimpleCursorAdapter(this, R.layout.listitem_contact, null, tovari, sxema); SimpleCursorAdapter: резултат SimpleCursorAdapter adapter; private void setupAdapter() { String[] tovari = {ContactsContract.Contacts.PHOTO_URI, ContactsContract.Contacts.DISPLAY_NAME}; int[] sxema = {R.id.ivImage, R.id.tvName}; adapter = new SimpleCursorAdapter(this, R.layout.listitem_contact, null, tovari, sxema); } Вопросы? Откуда SimpleCursorAdapter получает товары? Что доставляет товары в SimpleCursorAdapter? Cursor – грузовая машина LoaderManager – менеджер по загрузке Loader - грузчики Loader: код LoaderManager.LoaderCallbacks<Cursor> loader = new LoaderManager.LoaderCallbacks<Cursor>() { @Override public android.support.v4.content.Loader<Cursor> onCreateLoader(int id, Bundle args) { return null; } @Override public void onLoadFinished(android.support.v4.content.Loader<Cursor> loader, Cursor data) { } @Override public void onLoaderReset(android.support.v4.content.Loader<Cursor> loader) { }; } 3 стадии Loader 1. onCreateLoader – устройства на работу 2. onLoadFinished – после загрузки 3. onLoaderReset – загрузка заново 1.onCreateLoader - Устройства на работу 1. ContactsContract.Contacts._ID 2. ContactsContract.Contacts.DISPLAY_NAME 3. ContactsContract.Contacts.PHOTO_URI 1.onCreateLoader : код 1.Устройства на работу String[] tovari = {ContactsContract.Contacts._ID, ContactsContract.Contacts.PHOTO_URI, ContactsContract.Contacts.DISPLAY_NAME}; ContentProvider С какого склада? Uri sklad = ContactsContract.Contacts.CONTENT_URI; CursorLoader Место С какого склада Товары - tovari Критерия выбора Параметры выбора Сортировка CursorLoader: код CursorLoader cursorLoader = new CursorLoader(MainActivity.this, sklad, tovari, null, null, null) return cursorLoader; Доступ к складу Доступ к складу <uses-permission android:name="android.permission.READ_CONTA CTS"/> 2. onLoadFinished – после загрузки 2. onLoadFinished: код после загрузки @Override public void onLoadFinished(android.support.v4.content.Loader< Cursor> loader, Cursor cursor) { adapter.swapCursor(cursor); } 3. onLoaderReset – загрузка заново 3. onLoaderReset: код загрузка заново @Override public void onLoaderReset(android.support.v4.content.Loade r<Cursor> loader) { adapter.swapCursor(null); } getSupportLoaderManager().initLo ader(); initLoader: 3 параметра 1. int – id (87) 2. Bundle – args (new Bundle()) 3. LoaderManager.callback<> - loader initLoader: код getSupportLoaderManager().initLoader(1, new Bundle(), loader); Доставка ListView – лист покупателей <ListView android:id="@+id/lvContacts" android:layout_width="match_parent" android:layout_height="match_parent"/> Доставка ListView lvContacts = (ListView) findViewById(R.id.lvContacts); lvContacts.setAdapter(adapter); Вопросы Есть вопросы?