Урок 48. Используем SimpleAdapter.

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 48. Используем SimpleAdapter.

Сообщение damager82 » 16 янв 2012, 07:30

В этом уроке:

- рассмотрим пример использования SimpleAdapter

Click here to read this article!
Последний раз редактировалось damager82 02 май 2017, 23:35, всего редактировалось 10 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Урок 48. Как использовать радиокнопки?

Сообщение Oleg_SS » 19 янв 2012, 12:36

Ваш пример мне очень подходит, вот только как его модифицировать?
Подставил вместо чекбокса, радиокнопку
срабатывает нажатие на всех кнопках, а отмены нет.
В 43-м уроке описан одиночный и множественный выбор, но там не могу вставить еще один текст.
Вообщем мне надо:
радиокнопка и два текста (один крупным шрифтом, другой мелким)

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 48. Как использовать радиокнопки?

Сообщение damager82 » 20 янв 2012, 15:03

Oleg_SS писал(а):Ваш пример мне очень подходит, вот только как его модифицировать?
Подставил вместо чекбокса, радиокнопку
срабатывает нажатие на всех кнопках, а отмены нет.
В 43-м уроке описан одиночный и множественный выбор, но там не могу вставить еще один текст.
Вообщем мне надо:
радиокнопка и два текста (один крупным шрифтом, другой мелким)

Тут все не просто. Это надо руками обрабатывать. Без кастомизации адаптера или создания своего комопнента, думаю не обойтись. Попробую потом на эту тему урок наваять.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Vlady
Сообщения: 7
Зарегистрирован: 04 мар 2012, 07:41
Контактная информация:

Re: Урок 48. Используем SimpleAdapter.

Сообщение Vlady » 04 мар 2012, 07:42

А как понять на какие элементы пользователь проставил крыжики?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 48. Используем SimpleAdapter.

Сообщение damager82 » 05 мар 2012, 10:24

Vlady писал(а):А как понять на какие элементы пользователь проставил крыжики?
В этой реализации, думаю что никак. Надо кастом-адаптер использовать. В уроке 54 можно глянуть.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Vlady
Сообщения: 7
Зарегистрирован: 04 мар 2012, 07:41
Контактная информация:

Re: Урок 48. Используем SimpleAdapter.

Сообщение Vlady » 05 мар 2012, 11:22

Ага, уже понял и написал кастомный адаптер. Всё отлично работает.

irukanji
Сообщения: 12
Зарегистрирован: 26 мар 2012, 12:51

Re: Урок 48. Используем SimpleAdapter.

Сообщение irukanji » 15 апр 2012, 09:41

такой вопрос - есть несколько картинок (как вариация урока) и несколько разных текстов; item для ячейки списка состоит из картинки и 2-х текстовок
делаю так -
public class CatsList extends Activity {

final String ATTRIBUTE_NAME_TEXT = "text";
final String ATTRIBUTE_NAME_VALUE = "value";
final String ATTRIBUTE_NAME_IMAGE = "image";
ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.catslist);

---понимаю что неправильно задаю массивы, но другого пути не знаю-----

int [] images = {R.drawable.harakter,R.drawable.history,R.drawable.pitanie};
int [] values = {R.string.history, R.string.haracter, R.string.pitanie};
int [] values1 = {R.string.start, R.string.osob_harac, R.string.osob_pit};

ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
Map<String, Object> m;
m = new HashMap<String, Object>();
for(int i=0; i<=images.length; i++){
m.put(ATTRIBUTE_NAME_IMAGE, images);
m.put(ATTRIBUTE_NAME_TEXT, values[]);
m.put(ATTRIBUTE_NAME_VALUE, values1[]);
data.add(m);
}

String [] from = {ATTRIBUTE_NAME_IMAGE,ATTRIBUTE_NAME_TEXT,ATTRIBUTE_NAME_VALUE};
int to[] = {R.id.imageView1, R.id.textV1, R.id.textV2};

SimpleAdapter sAdapter = new SimpleAdapter(this, data, R.layout.itemcat, from, to);

lv = (ListView)findViewById(R.id.listView1);
lv.setAdapter(sAdapter);
}
}
активити даже не запускается! а мне надо чтоб в каждую отдельную ячейку списка заходил разный набор imageview, string, string. Что посоветуете

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 48. Используем SimpleAdapter.

Сообщение damager82 » 16 апр 2012, 11:24

irukanji писал(а):активити даже не запускается! а мне надо чтоб в каждую отдельную ячейку списка заходил разный набор imageview, string, string. Что посоветуете
В строке:

Код: Выделить всё

for(int i=0; i<=images.length; i++){
ошибка.
Вместо <= надо просто <. Иначе за границы массива выходите.

В этих строках

Код: Выделить всё

m.put(ATTRIBUTE_NAME_TEXT, values[]);
m.put(ATTRIBUTE_NAME_VALUE, values1[]);
не указан индекс элемента массива в квадратных скобках.

Массивы values и values1 у вас содержат не тексты, а их ID. И в списке у вас по умолчанию получатся тоже не тексты, а цифры.
Используйте getResources().getString(R.string.history), чтобы получить текст. Либо надо кастомизировать адаптер, чтоб вместо ID текст выводил.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

irukanji
Сообщения: 12
Зарегистрирован: 26 мар 2012, 12:51

Re: Урок 48. Используем SimpleAdapter.

Сообщение irukanji » 18 апр 2012, 13:54

Спасибо за ответы...Но так и не могу вьехать как вогнать в каждую отдельную ячейку ListView такой набор - ImageView, TextView, TextView, причем для каждой ячейки совершенно разный набор этих элементов...Кто подскажет?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 48. Используем SimpleAdapter.

Сообщение damager82 » 19 апр 2012, 09:21

irukanji писал(а):Спасибо за ответы...Но так и не могу вьехать как вогнать в каждую отдельную ячейку ListView такой набор - ImageView, TextView, TextView, причем для каждой ячейки совершенно разный набор этих элементов...Кто подскажет?
А разве текущий код не достигает этой цели? Он одно и то же в каждом пункте списка показывает?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

irukanji
Сообщения: 12
Зарегистрирован: 26 мар 2012, 12:51

Re: Урок 48. Используем SimpleAdapter.

Сообщение irukanji » 20 апр 2012, 17:25

Именно так! Но уже поискал и нашел решение через кастомизацию baseadapter и его метода getview, но так и не понял почему так происходит, вроде по логике все верно делал?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 48. Используем SimpleAdapter.

Сообщение damager82 » 23 апр 2012, 09:55

irukanji писал(а):так и не понял почему так происходит, вроде по логике все верно делал?
Я скопировал ваш код себе, пофиксил его, как уже описывал выше и все работало как надо.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Eserchik
Сообщения: 14
Зарегистрирован: 04 авг 2012, 13:29

Re: Урок 48. Используем SimpleAdapter.

Сообщение Eserchik » 04 авг 2012, 13:35

Люди подскажите можно ли этом примере обработать нажание ImageView , что б при нажатии на каждую ImageView получить еще ID элемента списка?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 48. Используем SimpleAdapter.

Сообщение rezak90 » 04 авг 2012, 13:57

Eserchik переопределяй SimpleAdapter и там уже в getView определяешь свои компоненты и соответственно вешай онклик на ImageView.
R.id.team
Политика на форуме запрещена

Eserchik
Сообщения: 14
Зарегистрирован: 04 авг 2012, 13:29

Re: Урок 48. Используем SimpleAdapter.

Сообщение Eserchik » 04 авг 2012, 22:58

Не могли бы поподробнее обьяснить?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 48. Используем SimpleAdapter.

Сообщение rezak90 » 04 авг 2012, 23:07

Вот тебе пример:

Код: Выделить всё

public class Adapter extends SimpleAdapter{
    HashMap<String, String> map = new HashMap<String, String>();
    public Adapter(Context context, List<? extends Map<String, String>> data,
            int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);

    }
@Override
    public View getView(int position, View convertView, ViewGroup parent){
        View row = super.getView(position, convertView, parent);
        if (row == null) {
            LayoutInflater mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = mInflater.inflate(R.layout.mylistlayout, parent, false);
            }
        row.setBackgroundColor(0xFF0000FF);
       TextView rw1 = (TextView)findViewById(R.id.row1);
      // TextView rw2 = (TextView)findViewById(R.id.row2);
       rw1.setText(map.get(position));
       return row;
    }

}
З.Ы. если это тебе сложно, то будем разжевывать...
R.id.team
Политика на форуме запрещена

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 48. Используем SimpleAdapter.

Сообщение math64 » 05 авг 2012, 20:13

rezak90 - ничего из того, что ты написал в коде в предыдущем сообщении, делать не надо - всё сделает базовый класс, ну, кроме, setBackgroundColor().
Нужно установить обработчик.
Но rw1.setOnClickListener() работатать не будет - row существует только для отрисовки строки ListView (или ячейки GridView)
Что есть взамен у андроида - не знаю.

Barrya42
Сообщения: 10
Зарегистрирован: 19 сен 2012, 13:05

Re: Урок 48. Используем SimpleAdapter.

Сообщение Barrya42 » 19 сен 2012, 13:14

Код: Выделить всё

Map<String, Object> m;
    for (int i = 0; i < texts.length; i++) {
      m = new HashMap<String, Object>();
      m.put(ATTRIBUTE_NAME_TEXT, texts[i]);
      m.put(ATTRIBUTE_NAME_CHECKED, checked[i]);
      m.put(ATTRIBUTE_NAME_IMAGE, img);
      data.add(m);
    }
Для чего мы объявляем переменную класса Map и сразу назначаем ей ссылку на новый экземпляр класса HashMap
Ведь можно сделать и...

Код: Выделить всё

		// Map<String, Object> m;
		for (int i = 0; i < texts.length; i++)
		{
			HashMap<String, Object> m = new HashMap<String, Object>();
			m.put(ATTRIBUTE_NAME_TEXT, texts[i]);
			m.put(ATTRIBUTE_NAME_CHECKED, checked[i]);
			m.put(ATTRIBUTE_NAME_IMAGE, img);
			data.add(m);
		}
Или я не прав поясните пожалуйста. Спасибо.

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 48. Используем SimpleAdapter.

Сообщение math64 » 19 сен 2012, 14:44

Barrya42 - всё правильно, можно сделать такое изменение кода.
Если бы можно было обойтись одной Map, объявление её вне цикла имело бы смысл.
А поскольку на каждом обороте цикла нужна новая HashMap - то и объявлять её лучше внутри цикла.

Overdos
Сообщения: 33
Зарегистрирован: 09 авг 2012, 20:58
Откуда: Краснодар

Re: Урок 48. Используем SimpleAdapter.

Сообщение Overdos » 26 сен 2012, 21:41

Всем привет! Скажите плиз...Что такое Адаптер , только как можно проще)) и для чего он нужен и пример его использования в программах ! Спасибо )

Ответить