Вопрос по работе с LoaderManager.LoaderCallbacks<Cursor>
Добавлено: 30 окт 2013, 22:21
Здравствуйте.
Имеется простая таблица, ContentProvider для этой таблицы. В таблице есть колонка Favorites, которая хранит 1 или 0.
Еще есть Activity c Listview и кастомным CursorAdapter"om.
При загрузке Activity передаю только строки, в которых столбец Favorites = 1:
onCreateLoader:
[syntax=java]public android.support.v4.content.Loader<Cursor> onCreateLoader(int id,
Bundle args) {
String[] projection = { CurrenciesTable.COLUMN_ID,
CurrenciesTable.COLUMN_ABBREVIATIONS,
CurrenciesTable.COLUMN_CURRENCIES_NAME };
CursorLoader cursorloader = new CursorLoader(this,
CurrenciesContentProvider.CONTENT_URI, projection,
CurrenciesTable.COLUMN_CURRENCIES_FAVORITES + "=?",
new String[] { "1" }, null);
return cursorloader;
}[/syntax]
onLoadFinished:
[syntax=java]
public void onLoadFinished(
android.support.v4.content.Loader<Cursor> loader, Cursor cursor) {
if (currAdapter != null && cursor != null) {
currAdapter.swapCursor(cursor);
}
}[/syntax]
Еще имееться кнопка, при нажатии на которую я показываю все строки в Listview, ну и при повторном нажатии показываю опять только те, в которых Favorites = 1;
Весь этот код выглядит вот так:
[syntax=java]
private void showAll() {
Resources res = getResources();
String showAllText = res.getString(R.string.show_all);
String showFavoritesText = res.getString(R.string.show_favorites);
Cursor cursor = null;
if (!mAllshowed) {
cursor = getContentResolver().query(
CurrenciesContentProvider.CONTENT_URI, null, null, null,
null);
mAllshowed = true;
mBtnShowAll.setText(showFavoritesText);
} else {
String[] projection = { CurrenciesTable.COLUMN_ID,
CurrenciesTable.COLUMN_ABBREVIATIONS,
CurrenciesTable.COLUMN_CURRENCIES_NAME };
cursor = getContentResolver().query(
CurrenciesContentProvider.CONTENT_URI, projection,
CurrenciesTable.COLUMN_CURRENCIES_FAVORITES + "=?",
new String[] { "1" }, null);
mAllshowed = false;
mBtnShowAll.setText(showAllText);
}
currAdapter.swapCursor(cursor);
}
[/syntax]
Все работает и делает то, что от него требуется
. Но я так понимаю, что код в методе showAll() выполняется в одном с UI потоке. Как правильно это все переделать использую Loader? Подходит ли он для таких вещей, ну и если нет, может объясните, как правильно делать такие вещи
.
Спасибо
Имеется простая таблица, ContentProvider для этой таблицы. В таблице есть колонка Favorites, которая хранит 1 или 0.
Еще есть Activity c Listview и кастомным CursorAdapter"om.
При загрузке Activity передаю только строки, в которых столбец Favorites = 1:
onCreateLoader:
[syntax=java]public android.support.v4.content.Loader<Cursor> onCreateLoader(int id,
Bundle args) {
String[] projection = { CurrenciesTable.COLUMN_ID,
CurrenciesTable.COLUMN_ABBREVIATIONS,
CurrenciesTable.COLUMN_CURRENCIES_NAME };
CursorLoader cursorloader = new CursorLoader(this,
CurrenciesContentProvider.CONTENT_URI, projection,
CurrenciesTable.COLUMN_CURRENCIES_FAVORITES + "=?",
new String[] { "1" }, null);
return cursorloader;
}[/syntax]
onLoadFinished:
[syntax=java]
public void onLoadFinished(
android.support.v4.content.Loader<Cursor> loader, Cursor cursor) {
if (currAdapter != null && cursor != null) {
currAdapter.swapCursor(cursor);
}
}[/syntax]
Еще имееться кнопка, при нажатии на которую я показываю все строки в Listview, ну и при повторном нажатии показываю опять только те, в которых Favorites = 1;
Весь этот код выглядит вот так:
[syntax=java]
private void showAll() {
Resources res = getResources();
String showAllText = res.getString(R.string.show_all);
String showFavoritesText = res.getString(R.string.show_favorites);
Cursor cursor = null;
if (!mAllshowed) {
cursor = getContentResolver().query(
CurrenciesContentProvider.CONTENT_URI, null, null, null,
null);
mAllshowed = true;
mBtnShowAll.setText(showFavoritesText);
} else {
String[] projection = { CurrenciesTable.COLUMN_ID,
CurrenciesTable.COLUMN_ABBREVIATIONS,
CurrenciesTable.COLUMN_CURRENCIES_NAME };
cursor = getContentResolver().query(
CurrenciesContentProvider.CONTENT_URI, projection,
CurrenciesTable.COLUMN_CURRENCIES_FAVORITES + "=?",
new String[] { "1" }, null);
mAllshowed = false;
mBtnShowAll.setText(showAllText);
}
currAdapter.swapCursor(cursor);
}
[/syntax]
Все работает и делает то, что от него требуется
Спасибо