Урок 48. Используем SimpleAdapter.
Урок 48. Используем SimpleAdapter.
Последний раз редактировалось damager82 02 май 2017, 23:35, всего редактировалось 10 раз.
Re: Урок 48. Как использовать радиокнопки?
Ваш пример мне очень подходит, вот только как его модифицировать?
Подставил вместо чекбокса, радиокнопку
срабатывает нажатие на всех кнопках, а отмены нет.
В 43-м уроке описан одиночный и множественный выбор, но там не могу вставить еще один текст.
Вообщем мне надо:
радиокнопка и два текста (один крупным шрифтом, другой мелким)
Подставил вместо чекбокса, радиокнопку
срабатывает нажатие на всех кнопках, а отмены нет.
В 43-м уроке описан одиночный и множественный выбор, но там не могу вставить еще один текст.
Вообщем мне надо:
радиокнопка и два текста (один крупным шрифтом, другой мелким)
Re: Урок 48. Как использовать радиокнопки?
Oleg_SS писал(а):Ваш пример мне очень подходит, вот только как его модифицировать?
Подставил вместо чекбокса, радиокнопку
срабатывает нажатие на всех кнопках, а отмены нет.
В 43-м уроке описан одиночный и множественный выбор, но там не могу вставить еще один текст.
Вообщем мне надо:
радиокнопка и два текста (один крупным шрифтом, другой мелким)
Тут все не просто. Это надо руками обрабатывать. Без кастомизации адаптера или создания своего комопнента, думаю не обойтись. Попробую потом на эту тему урок наваять.
Re: Урок 48. Используем SimpleAdapter.
А как понять на какие элементы пользователь проставил крыжики?
Re: Урок 48. Используем SimpleAdapter.
В этой реализации, думаю что никак. Надо кастом-адаптер использовать. В уроке 54 можно глянуть.Vlady писал(а):А как понять на какие элементы пользователь проставил крыжики?
Re: Урок 48. Используем SimpleAdapter.
Ага, уже понял и написал кастомный адаптер. Всё отлично работает.
Re: Урок 48. Используем SimpleAdapter.
такой вопрос - есть несколько картинок (как вариация урока) и несколько разных текстов; 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. Что посоветуете
делаю так -
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.
В строке: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.
Спасибо за ответы...Но так и не могу вьехать как вогнать в каждую отдельную ячейку ListView такой набор - ImageView, TextView, TextView, причем для каждой ячейки совершенно разный набор этих элементов...Кто подскажет?
Re: Урок 48. Используем SimpleAdapter.
А разве текущий код не достигает этой цели? Он одно и то же в каждом пункте списка показывает?irukanji писал(а):Спасибо за ответы...Но так и не могу вьехать как вогнать в каждую отдельную ячейку ListView такой набор - ImageView, TextView, TextView, причем для каждой ячейки совершенно разный набор этих элементов...Кто подскажет?
Re: Урок 48. Используем SimpleAdapter.
Именно так! Но уже поискал и нашел решение через кастомизацию baseadapter и его метода getview, но так и не понял почему так происходит, вроде по логике все верно делал?
Re: Урок 48. Используем SimpleAdapter.
Я скопировал ваш код себе, пофиксил его, как уже описывал выше и все работало как надо.irukanji писал(а):так и не понял почему так происходит, вроде по логике все верно делал?
Re: Урок 48. Используем SimpleAdapter.
Люди подскажите можно ли этом примере обработать нажание ImageView , что б при нажатии на каждую ImageView получить еще ID элемента списка?
Re: Урок 48. Используем SimpleAdapter.
Eserchik переопределяй SimpleAdapter и там уже в getView определяешь свои компоненты и соответственно вешай онклик на ImageView.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 48. Используем SimpleAdapter.
Не могли бы поподробнее обьяснить?
Re: Урок 48. Используем SimpleAdapter.
Вот тебе пример:
З.Ы. если это тебе сложно, то будем разжевывать...
Код: Выделить всё
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
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 48. Используем SimpleAdapter.
rezak90 - ничего из того, что ты написал в коде в предыдущем сообщении, делать не надо - всё сделает базовый класс, ну, кроме, setBackgroundColor().
Нужно установить обработчик.
Но rw1.setOnClickListener() работатать не будет - row существует только для отрисовки строки ListView (или ячейки GridView)
Что есть взамен у андроида - не знаю.
Нужно установить обработчик.
Но rw1.setOnClickListener() работатать не будет - row существует только для отрисовки строки ListView (или ячейки GridView)
Что есть взамен у андроида - не знаю.
Re: Урок 48. Используем SimpleAdapter.
Код: Выделить всё
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<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.
Barrya42 - всё правильно, можно сделать такое изменение кода.
Если бы можно было обойтись одной Map, объявление её вне цикла имело бы смысл.
А поскольку на каждом обороте цикла нужна новая HashMap - то и объявлять её лучше внутри цикла.
Если бы можно было обойтись одной Map, объявление её вне цикла имело бы смысл.
А поскольку на каждом обороте цикла нужна новая HashMap - то и объявлять её лучше внутри цикла.
Re: Урок 48. Используем SimpleAdapter.
Всем привет! Скажите плиз...Что такое Адаптер , только как можно проще)) и для чего он нужен и пример его использования в программах ! Спасибо )