ContentProvider

advertisement
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);
Вопросы

Есть вопросы?
Download