Урок 47. Обзор адаптеров
Урок 47. Обзор адаптеров
Последний раз редактировалось damager82 11 янв 2012, 12:55, всего редактировалось 11 раз.
Re: Урок 47. Обзор адаптеров
В общем-то интересны все варианты. Опыт лишним не бывает. В первую очередь хотелось бы посмотреть на работу с SimpleAdapter, и SimpleCursorAdapter. Интересует еще работа с методом setViewBinder.
Урок в целом хорош, но требует продолжения
Урок в целом хорош, но требует продолжения
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
Re: Урок 47. Обзор адаптеров
Приятно видеть развитие проекта =)
Re: Урок 47. Обзор адаптеров
огромное спасибо, хоть немного начинает складываться в голове картина о этих адаптерах, а то их блин целая куча.
я пока использую BaseAdapter из примера про GridView http://developer.android.com/resources/ ... dview.html
он хорош тем, что умеет выводить всё что угодно, тем более заработало сразу
я пока использую BaseAdapter из примера про GridView http://developer.android.com/resources/ ... dview.html
он хорош тем, что умеет выводить всё что угодно, тем более заработало сразу
Re: Урок 47. Обзор адаптеров
Здравствуйте! Спасибо большое за уроки - все очень доступно рассказано.
Хотелось бы увидеть пример работы с SimpleCursorTreeAdapter.
Хотелось бы увидеть пример работы с SimpleCursorTreeAdapter.
Re: Урок 47. Обзор адаптеров
Здравствуйте!
Хотелось бы увидеть пример работы с HeaderViewListAdapter.
Спасибо
Хотелось бы увидеть пример работы с HeaderViewListAdapter.
Спасибо
Re: Урок 47. Обзор адаптеров
Как раз в ближайший четверг (09.02) выйдет урок по Header и Footer )lics писал(а): Хотелось бы увидеть пример работы с HeaderViewListAdapter.
Re: Урок 47. Обзор адаптеров
Не подскажете, какой адаптер следует выбрать, чтобы можно было сразу создать одинаковый список элементов, но и можно было изменить внешний вид какого-то одного элемента списка динамически?
я начал с BaseAdapter. Каждый элемент имеет CheckBox и ProgressBar (visibility = View.GONE). При клике на кнопку у всех элементах, в которых выделенный чекбокс, должен появляется ProgressBar (visibility = View.VISIBLE), но я не знаю, как достать нужный item и изменить его вид
я начал с BaseAdapter. Каждый элемент имеет CheckBox и ProgressBar (visibility = View.GONE). При клике на кнопку у всех элементах, в которых выделенный чекбокс, должен появляется ProgressBar (visibility = View.VISIBLE), но я не знаю, как достать нужный item и изменить его вид
Re: Урок 47. Обзор адаптеров
Адаптер работает во время создания элементов списка, поэтому без разницы какой вы будете использовать.A.N.R.I писал(а):Не подскажете, какой адаптер следует выбрать, чтобы можно было сразу создать одинаковый список элементов, но и можно было изменить внешний вид какого-то одного элемента списка динамически?
я начал с BaseAdapter. Каждый элемент имеет CheckBox и ProgressBar (visibility = View.GONE). При клике на кнопку у всех элементах, в которых выделенный чекбокс, должен появляется ProgressBar (visibility = View.VISIBLE), но я не знаю, как достать нужный item и изменить его вид
Для доступа к элементам списка всегда можно воспользоваться методами унаследованными от ViewGroup для поиска дочерних элементов по индексу.
Но т.к. вы используете чек-боксы, значит у вас должна быть функция обратного вызова для контроля изменения их состояния. Эта функция передаст вам ссылку на соответствующий чек-бокс. Вызовом getParent () вы получите родительский элемент вашего чек-бокса, т.е Layout элемента списка. Далее можете использовать, к примеру, findViewById.
Re: Урок 47. Обзор адаптеров
Добрый день! Парни, подскажите. Есть ArrayAdapter и ArrayList. На экране ListView, который наполняется динамически. Проблема с элементами ListView, которые не видны на экране. Когда я прокручиваю ЛистВью и эти элементы становятся видны, то значения там не те, что должны быть, а те, что были в начале списка. А если много раз его прокручивать вверх/вниз, то записи начинают дублироваться и смешиваться. Может ли кто предположить, с чем это может быть связано?
Re: Урок 47. Обзор адаптеров
Код в студию.Eva писал(а):Добрый день! Парни, подскажите. Есть ArrayAdapter и ArrayList. На экране ListView, который наполняется динамически. Проблема с элементами ListView, которые не видны на экране. Когда я прокручиваю ЛистВью и эти элементы становятся видны, то значения там не те, что должны быть, а те, что были в начале списка. А если много раз его прокручивать вверх/вниз, то записи начинают дублироваться и смешиваться. Может ли кто предположить, с чем это может быть связано?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 47. Обзор адаптеров
неверно реализован адаптер
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
-
- Сообщения: 11
- Зарегистрирован: 28 окт 2014, 14:43
Re: Урок 47. Обзор адаптеров
Всем привет!
Может кто подскажет? есть возможность вставить в адаптер элемент WebView?
Нужен для отображения в списке картинок маленького формата из интернет без необходимости сохранения. Рысачу интернет уже 2 дня в поисках решения. В том числе форум. Результата нет.
Как я понимаю из уроков WebView не является элементом для построения списка.
Пробовал уже в setViewBinder при настройке View через AsyncTask использовать метод loadUrl().
Уточню - я понимаю, что через ж...
Но адаптер(SimpleAdapter) Все равно отказывается работать(что как я понял не удивительно).
Получилось через "Урок 41. Используем LayoutInflater для создания списка" но не подходит. Нужно кликабельный полноценный список. Да и метод WebView.getSettings() ругается "cannot be referenced from a static context".
Может кто знает другой способ создания списка с подгрузкой элементов из интернет?
Может кто подскажет? есть возможность вставить в адаптер элемент WebView?
Нужен для отображения в списке картинок маленького формата из интернет без необходимости сохранения. Рысачу интернет уже 2 дня в поисках решения. В том числе форум. Результата нет.
Как я понимаю из уроков WebView не является элементом для построения списка.
Пробовал уже в setViewBinder при настройке View через AsyncTask использовать метод loadUrl().
Уточню - я понимаю, что через ж...
Но адаптер(SimpleAdapter) Все равно отказывается работать(что как я понял не удивительно).
Получилось через "Урок 41. Используем LayoutInflater для создания списка" но не подходит. Нужно кликабельный полноценный список. Да и метод WebView.getSettings() ругается "cannot be referenced from a static context".
Может кто знает другой способ создания списка с подгрузкой элементов из интернет?
-
- Сообщения: 11
- Зарегистрирован: 28 окт 2014, 14:43
Re: Урок 47. Обзор адаптеров
Если кому то интересно и тоже пригодится - то мой вопрос решается так:
Используем AsyncTask и получаем:
Код: Выделить всё
imgView.setImageDrawable(grabImageFromUrl(url));
private Drawable grabImageFromUrl(String url) throws Exception {
return Drawable.createFromStream(
(InputStream) new URL(url).getContent(), "src");
}
Код: Выделить всё
class PicLoader extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
try {
TimeUnit.SECONDS.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
String p = params[0];
return p;
}
@Override
protected void onPostExecute(String p) {
super.onPostExecute(p);
try {
imgView.setImageDrawable(grabImageFromUrl(url));
} catch (Exception e) {
Log.d(LOG_TAG, "Exception в onPostExecute class CatTask extends AsyncTask");
}
}
private Drawable grabImageFromUrl(String url) throws Exception {
return Drawable.createFromStream(
(InputStream) new URL(url).getContent(), "src");
}
}
Re: Урок 47. Обзор адаптеров
А почему загрузка картинок происходит в onPostExecute? Правильно наверно делать doInBackground.
-
- Сообщения: 11
- Зарегистрирован: 28 окт 2014, 14:43
Re: Урок 47. Обзор адаптеров
Ну на сколько я понимаю из :
"В методе doInBackground() идёт имитация тяжёлой работы. Здесь нельзя писать код, связанный с пользовательским интерфейсом." - то нет.
И еще назрел вопрос. Может кто подскажет? Создаю класс:
Создаю адаптер и скармливаю ему биндер:
data_menu - ArrayList<Map<String, Object>>
Имеется 3 TextView и 1 ImageView который и подвергается надругательству
В результате картинка грузится только в первом пункте меню. Остальные остаются пустыми.
Похоже одно View получает и отображает поочередно все картинки.
Кроме того получаю вот такой лог:
И так пока не закроешь приложение в эмуляторе.
Подскажите пожалуйста, в чем моя ошибка?
"В методе doInBackground() идёт имитация тяжёлой работы. Здесь нельзя писать код, связанный с пользовательским интерфейсом." - то нет.
И еще назрел вопрос. Может кто подскажет? Создаю класс:
Код: Выделить всё
class MyViewBinder implements SimpleAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Object data,
String textRepresentation) {
String url = (String)data;
switch (view.getId()) {
// LinearLayout
case R.id.ivImg:
new PicLoader(MainActivity.this).execute(url);
return true;
}
return false;
}
}
Код: Выделить всё
class PicLoader extends AsyncTask<String, Void, String[]> {
Context context;
ImageView ivImg = (ImageView)findViewById(R.id.ivImg);
final String LOG_TAG = "myLogs";
public PicLoader(Context context) {
super();
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d(LOG_TAG, "Start PicLoader extends AsyncTask");
}
@Override
protected String[] doInBackground(String... params) {
String[] urls = params;
return urls;
}
@Override
protected void onPostExecute(String[] urls) {
super.onPostExecute(urls);
for(String url:urls) {
try {
ivImg.setImageDrawable(grabImageFromUrl(url));
} catch (Exception e) {
Log.d(LOG_TAG, "Exception в onPostExecute class PicLoader extends AsyncTask");
}
}
}
private Drawable grabImageFromUrl(String url) throws Exception {
return Drawable.createFromStream(
(InputStream) new URL(url).getContent(), "src");
}
}
Код: Выделить всё
ArrayList<Map<String, Object>> data_menu = new ArrayList<Map<String, Object>>();
String[] from = {NAME, ADDRESS, PHONE, IMAGE};
int[] to = { R.id.tvName, R.id.tvAddress, R.id.tvPhone,R.id.ivImg};
// адаптер
sAdapter = new SimpleAdapter(this, data_menu, R.layout.item_rest,
from, to);
// биндер
sAdapter.setViewBinder(new MyViewBinder());
Имеется 3 TextView и 1 ImageView который и подвергается надругательству
В результате картинка грузится только в первом пункте меню. Остальные остаются пустыми.
Похоже одно View получает и отображает поочередно все картинки.
Кроме того получаю вот такой лог:
Код: Выделить всё
11-28 18:27:54.786 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:54.806 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:54.816 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:54.826 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:54.846 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:54.866 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:55.496 564-564/com.example.fikus.post241114 D/myLogs﹕ Exception e - java.lang.NullPointerException
11-28 18:27:55.496 564-564/com.example.fikus.post241114 D/myLogs﹕ Exception в onPostExecute class PicLoader extends AsyncTask
11-28 18:27:55.756 564-564/com.example.fikus.post241114 D/dalvikvm﹕ GC_EXTERNAL_ALLOC freed 281K, 51% free 2913K/5831K, external 2097K/2137K, paused 86ms
11-28 18:27:55.816 564-564/com.example.fikus.post241114 D/myLogs﹕ Exception e - java.lang.NullPointerException
11-28 18:27:55.816 564-564/com.example.fikus.post241114 D/myLogs﹕ Exception в onPostExecute class PicLoader extends AsyncTask
11-28 18:27:55.986 564-564/com.example.fikus.post241114 D/myLogs﹕ Exception e - java.lang.NullPointerException
11-28 18:27:55.986 564-564/com.example.fikus.post241114 D/myLogs﹕ Exception в onPostExecute class PicLoader extends AsyncTask
11-28 18:27:56.227 564-564/com.example.fikus.post241114 D/myLogs﹕ Exception e - java.lang.NullPointerException
11-28 18:27:56.227 564-564/com.example.fikus.post241114 D/myLogs﹕ Exception в onPostExecute class PicLoader extends AsyncTask
11-28 18:27:56.616 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:56.616 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:56.626 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:57.157 564-564/com.example.fikus.post241114 D/dalvikvm﹕ GC_EXTERNAL_ALLOC freed 300K, 52% free 2907K/5959K, external 2569K/2747K, paused 74ms
11-28 18:27:57.396 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:57.406 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:57.406 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:58.016 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:58.026 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:58.057 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:58.636 312-312/? D/dalvikvm﹕ GC_EXPLICIT freed 1K, 54% free 2538K/5511K, external 1625K/2137K, paused 66ms
11-28 18:27:58.756 564-564/com.example.fikus.post241114 D/dalvikvm﹕ GC_EXTERNAL_ALLOC freed 334K, 52% free 2907K/6023K, external 2822K/2840K, paused 72ms
11-28 18:27:58.777 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:58.788 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:58.796 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:59.486 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:59.496 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:27:59.507 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:28:00.427 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:28:00.437 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
11-28 18:28:00.446 564-564/com.example.fikus.post241114 D/myLogs﹕ Start PicLoader extends AsyncTask
Подскажите пожалуйста, в чем моя ошибка?
-
- Сообщения: 11
- Зарегистрирован: 28 окт 2014, 14:43
Re: Урок 47. Обзор адаптеров
вопрос решен.
Re: Урок 47. Обзор адаптеров
У вас grabImageFromUrl() - это долгий процесс, который должен быть отработан в doInBackground.
а в onPostExecute вам надо сделать только ivImg.setImageDrawable.
Ну и AsyncTask <String, Void, Drawable> должен быть.
а в onPostExecute вам надо сделать только ivImg.setImageDrawable.
Ну и AsyncTask <String, Void, Drawable> должен быть.