Страница 1 из 5

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

Добавлено: 16 янв 2012, 07:30
damager82
В этом уроке:

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

Click here to read this article!

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

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

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

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

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

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

Добавлено: 04 мар 2012, 07:42
Vlady
А как понять на какие элементы пользователь проставил крыжики?

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

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

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

Добавлено: 05 мар 2012, 11:22
Vlady
Ага, уже понял и написал кастомный адаптер. Всё отлично работает.

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

Добавлено: 15 апр 2012, 09:41
irukanji
такой вопрос - есть несколько картинок (как вариация урока) и несколько разных текстов; 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. Что посоветуете

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

Добавлено: 16 апр 2012, 11:24
damager82
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 текст выводил.

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

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

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

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

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

Добавлено: 20 апр 2012, 17:25
irukanji
Именно так! Но уже поискал и нашел решение через кастомизацию baseadapter и его метода getview, но так и не понял почему так происходит, вроде по логике все верно делал?

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

Добавлено: 23 апр 2012, 09:55
damager82
irukanji писал(а):так и не понял почему так происходит, вроде по логике все верно делал?
Я скопировал ваш код себе, пофиксил его, как уже описывал выше и все работало как надо.

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

Добавлено: 04 авг 2012, 13:35
Eserchik
Люди подскажите можно ли этом примере обработать нажание ImageView , что б при нажатии на каждую ImageView получить еще ID элемента списка?

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

Добавлено: 04 авг 2012, 13:57
rezak90
Eserchik переопределяй SimpleAdapter и там уже в getView определяешь свои компоненты и соответственно вешай онклик на ImageView.

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

Добавлено: 04 авг 2012, 22:58
Eserchik
Не могли бы поподробнее обьяснить?

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

Добавлено: 04 авг 2012, 23:07
rezak90
Вот тебе пример:

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

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;
    }

}
З.Ы. если это тебе сложно, то будем разжевывать...

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

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

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

Добавлено: 19 сен 2012, 13:14
Barrya42

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

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);
		}
Или я не прав поясните пожалуйста. Спасибо.

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

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

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

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