массивы...неодинаковое количество элементов)))siberprogs писал(а): Странно.
Урок 44. События в ListView
Re: Урок 44. События в ListView
Re: Урок 44. События в ListView
Вопрос, на который я нигде не нашел ответ. Касается события в ListView onItemClickListener. В качестве адаптера использую simpleCursorAdapter. Мне нужно сгенерировать график платежей, по нажатию на item нужно найти во view нажатого пункта списка спрятанный layout с атрибутом Visibility:gone и сделать его видимым. То есть типа выпадающий пояснительный список. Вот код
Загвоздка вот в чем.
1) Допустим сгенерировалось 50 пунктов в listview, из них 10 помещается на экране. Когда я нажимаю на какой-либо пункт, например, 1-ый пункт, то он делает видимыми и 11, 21, 31, 41 - пункты. Почему так происходит?
2) также если резко прокрутить вниз или вверх список, то сбивается порядок. То есть выбрал я 1ый пунк - открылись помимо 1 еще 11, 21, 31 и т.д потом прокрутил резко вниз и они стали 3, 13, 23, 33 и т.д.
Код: Выделить всё
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
LinearLayout lsubitem = (LinearLayout) view.findViewById(R.id.lsubitem);
if (lsubitem.getVisibility() == View.GONE) {
lsubitem.setVisibility(View.VISIBLE);
} else {
lsubitem.setVisibility(View.GONE);
}
1) Допустим сгенерировалось 50 пунктов в listview, из них 10 помещается на экране. Когда я нажимаю на какой-либо пункт, например, 1-ый пункт, то он делает видимыми и 11, 21, 31, 41 - пункты. Почему так происходит?
2) также если резко прокрутить вниз или вверх список, то сбивается порядок. То есть выбрал я 1ый пунк - открылись помимо 1 еще 11, 21, 31 и т.д потом прокрутил резко вниз и они стали 3, 13, 23, 33 и т.д.
Re: Урок 44. События в ListView
а зачем так делать, если есть http://startandroid.ru/ru/uroki/vse-uro ... anija.html
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
Re: Урок 44. События в ListView
Дело в том, что там заголовок берется из массива String, а я item.xml.Foenix писал(а):а зачем так делать, если есть http://startandroid.ru/ru/uroki/vse-uro ... anija.html
В общем представьте график платежей, таблицу, состоящий из полей "дата" "баланс" "платеж". в item.xml 3 Textview, где с помощью адаптера заполняется listview из БД. Мне надо на нажатие пункта списка "выпадал" невидимый layout где содержится какая-либо дополнительная информация по платежу. Мне ответили в другом месте так: "потому что нужно обновлять в getView и подобных методах. ListView кеширует элементы, когда Вы прокручиваете, то те элементы, которые "ушли с поля видимости" подсовываются с другой стороны. Если в getView их не обновить правильно (не обновить все поля), то они будут в "странном состоянии".
Вывод. onItemClick должен указывать адаптеру новое состояние и вызывать обновление списка (notifyDataChange)."
Разъясните, пожалуйста) с notifyDataChange знаком, просто не понял сути и когда его вызывать
Re: Урок 44. События в ListView
я не вижу противоречия с тем, что я предложила
однако вообще не поняла того, что вам где-то объяснили.
Что же касается отдельно от всего прочего "невидимого лэйаута" - то по-моему вы изобретаете велосипед. Информацию по платежу вот я вот лично выводила бы просто в диалоговом окошке, который появлялся по клику на пункт простого списка, к примеру. Зачем невидимый-то? так не делают.
либо еще раз повторяю - ты задумал что-то типа дерева, там тоже "выпадает". Делай ему кастомную строчку и хоть картинки хоть 100500 текствью там отображай.
однако вообще не поняла того, что вам где-то объяснили.
Что же касается отдельно от всего прочего "невидимого лэйаута" - то по-моему вы изобретаете велосипед. Информацию по платежу вот я вот лично выводила бы просто в диалоговом окошке, который появлялся по клику на пункт простого списка, к примеру. Зачем невидимый-то? так не делают.
либо еще раз повторяю - ты задумал что-то типа дерева, там тоже "выпадает". Делай ему кастомную строчку и хоть картинки хоть 100500 текствью там отображай.
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
Re: Урок 44. События в ListView
Если бы Вы подсказали, как сделать ему кастомную строчку, был бы крайне признателен, потому что у меня не получаетсяFoenix писал(а):я не вижу противоречия с тем, что я предложила
однако вообще не поняла того, что вам где-то объяснили.
Что же касается отдельно от всего прочего "невидимого лэйаута" - то по-моему вы изобретаете велосипед. Информацию по платежу вот я вот лично выводила бы просто в диалоговом окошке, который появлялся по клику на пункт простого списка, к примеру. Зачем невидимый-то? так не делают.
либо еще раз повторяю - ты задумал что-то типа дерева, там тоже "выпадает". Делай ему кастомную строчку и хоть картинки хоть 100500 текствью там отображай.
Re: Урок 44. События в ListView
почему не получается? уроки тут есть, делай все по ним.
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
Re: Урок 44. События в ListView
Добрый день. Есть вопрос, нигде не нашел ответа. Перерыл темы с кастомным адаптером и ListView.
На данный момент есть адаптер, наследуемый от BaseAdapter.
Есть список (ListView), когда я скролю его вниз, отрабатывает анимация и нижний элемент (item) выплывает нужным мне образом (анимацию реализовал). Но мне, так же, нужно чтобы верхний элемент “заплывал” тоже, с определенной анимацией. Как это реализовать? Как обратится к верхнему элементу во время скролла вниз? То есть, когда я скролю открывется новый элемент, position становится = 6, например (и анимация отрабатывает), но при этом одновременно должна происходить анимация элемента с position = 0, который прячется за видимую область. Надеюсь, понятно пояснил.
На данный момент есть адаптер, наследуемый от BaseAdapter.
Есть список (ListView), когда я скролю его вниз, отрабатывает анимация и нижний элемент (item) выплывает нужным мне образом (анимацию реализовал). Но мне, так же, нужно чтобы верхний элемент “заплывал” тоже, с определенной анимацией. Как это реализовать? Как обратится к верхнему элементу во время скролла вниз? То есть, когда я скролю открывется новый элемент, position становится = 6, например (и анимация отрабатывает), но при этом одновременно должна происходить анимация элемента с position = 0, который прячется за видимую область. Надеюсь, понятно пояснил.
Re: Урок 44. События в ListView
Я правильно понимаю, что все элементы списка держатся в оперативке? А как загружать в оперативу только те данные, которые видны непосредственно на экране? А остальное хранить в кеше на диске допустим? Есть какие таториалы или урок по этому?
Re: Урок 44. События в ListView
нет. В оперативке находятся только видимые элементы плюс два - верхний и нижний невидимые.Stormer писал(а):Я правильно понимаю, что все элементы списка держатся в оперативке? А как загружать в оперативу только те данные, которые видны непосредственно на экране? А остальное хранить в кеше на диске допустим? Есть какие таториалы или урок по этому?
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
Re: Урок 44. События в ListView
Вы уверены?? Т.е. такая вот простая процедура, чтобы реализовать это всё через адаптер? Я думал, там сложнее будет намного. Спасибо! )Foenix писал(а):нет. В оперативке находятся только видимые элементы плюс два - верхний и нижний невидимые.
Re: Урок 44. События в ListView
Своими ушами слышала от разработчика из гуглаStormer писал(а):Вы уверены?? Т.е. такая вот простая процедура, чтобы реализовать это всё через адаптер? Я думал, там сложнее будет намного. Спасибо! )Foenix писал(а):нет. В оперативке находятся только видимые элементы плюс два - верхний и нижний невидимые.
Вы, кстати, смотрите видео с гугл IO, там много интересного разъясняют. Правда, язык нужно знать..
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
Re: Урок 44. События в ListView
Да, пожалуй стоит. У меня upper intermediate. Тесты сдавал. Так что что-нибудь да пойму
Re: Урок 44. События в ListView
ой, ну тогда тебе понравится. И понять там не сложно - они ж почти все иностранцы у них, поэтому хотя у всех и акценты, но понять их проще даже.
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
Re: Урок 44. События в ListView
Я так понимаю, что на реальном устройстве (без мышки и клавиатуры и т.д.) OnItemSelectedListener не работает?
Re: Урок 44. События в ListView
Ппц, до чего злое это занятие - уже 2 часа ночи а мне на работу через 4 часа =/
Даже когда задротил по молодости, такого не было.
А засиделся я вот изза какой проблемы:
Суть приложения: Пользователь сам заполняет список. Нажимает на кнопочку Add, вылазит диалог, где пользователь выбирает дату. И создается пункт списка, содержащий в названии эту дату.
Теперь нужно, чтобы при нажатии на пункт списка открывался один из нескольких активити, по определённой зависимости.
И вот проблема - по ид элемента из БД никак не получится организовать вызов нужного активити - ведь приложение не знает, какую дату пользователь присвоил данному ид. Хочу, чтобы нужное активити вызывалось в зависимости от названия пункта списка( то есть по текстовому полю из БД).
Помогайте, как реализовать подобное?)
Даже когда задротил по молодости, такого не было.
А засиделся я вот изза какой проблемы:
Суть приложения: Пользователь сам заполняет список. Нажимает на кнопочку Add, вылазит диалог, где пользователь выбирает дату. И создается пункт списка, содержащий в названии эту дату.
Теперь нужно, чтобы при нажатии на пункт списка открывался один из нескольких активити, по определённой зависимости.
И вот проблема - по ид элемента из БД никак не получится организовать вызов нужного активити - ведь приложение не знает, какую дату пользователь присвоил данному ид. Хочу, чтобы нужное активити вызывалось в зависимости от названия пункта списка( то есть по текстовому полю из БД).
Помогайте, как реализовать подобное?)
Re: Урок 44. События в ListView
SСобственно не могу найти, можно ли в switch передать строку?
if/else пробовал, ничего не вышло, onItemClick словно не видит этих циклов.
if/else пробовал, ничего не вышло, onItemClick словно не видит этих циклов.
Re: Урок 44. События в ListView
1) вы что-то делаете не так.
2) switch по строкам появился в java 7 (поддерживается Android, можно поменять в настройках проекта)
3) if/else не циклы, вероятно вы не правильно сравниваете строки.
2) switch по строкам появился в java 7 (поддерживается Android, можно поменять в настройках проекта)
3) if/else не циклы, вероятно вы не правильно сравниваете строки.
Re: Урок 44. События в ListView
Будьте добры, посмотрите, возможно я не правильно сравниваю строки или еще что.
Надеюсь код не криво вставится =/
Вот, в итоге, по логам если посмотреть, Активити вообще пропускает всё, что идёт под знаком if, и запускает всегда 3-е активити. В заголовках списка ошибок нет.
А в логе, причем, выводится строка с именем элемента списка, как положено.
Очень хотелось бы реализовать именно на If/else, мне кажется это приятнее.
Простите за мой дилетантский лексикон - "циклы". Понимаю, что там циклами и не пахнет, просто писал это ночью. Да чего я отмазываюсь...нуб я.
В упор не вижу, что не так во всем коде. Никаких ошибок, ничего, за что можно было бы зацепиться и копать, просто обработчик пропускает все условия и вызывает последнее активити. Святой гугл не помогает уже сутки.
Надеюсь код не криво вставится =/
Код: Выделить всё
SpisokTablitsMes.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
cursor.moveToPosition(position);
String mesyac = cursor.getString(cursor.getColumnIndex("month"));
Log.d(LOG_TAG, "itemClick: position = " + position + ", id = "
+ id + ",месяц = " + mesyac);
if(mesyac == "Январь"||mesyac == "Март"||mesyac == "Май"){
Intent intent1 = new Intent(MainActivity.this, tabl1.class);
startActivity(intent1);
;}
else if (mesyac == "Апрель"||mesyac == "Июнь"){
Intent intent2 = new Intent(MainActivity.this, tabl2.class);
startActivity(intent2);
;}
else {
Intent intent4 = new Intent(MainActivity.this, tabl4.class);
startActivity(intent4);
;}
}
});
А в логе, причем, выводится строка с именем элемента списка, как положено.
Очень хотелось бы реализовать именно на If/else, мне кажется это приятнее.
Простите за мой дилетантский лексикон - "циклы". Понимаю, что там циклами и не пахнет, просто писал это ночью. Да чего я отмазываюсь...нуб я.
В упор не вижу, что не так во всем коде. Никаких ошибок, ничего, за что можно было бы зацепиться и копать, просто обработчик пропускает все условия и вызывает последнее активити. Святой гугл не помогает уже сутки.
Re: Урок 44. События в ListView
Всемогущий Гугл откликнулся на мои молитвы.
Вобщем, верный код выглядит так (может попадётся второй такой же бедолага, как я):
копипастнуть то я копипастнул, теперь нужно разбираться в сути этого фокуса =/
И да...спасибо за наводку
Так как if/else не кушает строки, то мы сравниваем значение строки mesyac с текстом "Месяц" с помощью оператора equals. И на выходе уже имеем бульку 1/0, которую if'у и надо было - цифроядный он.
Я молодец?
Вобщем, верный код выглядит так (может попадётся второй такой же бедолага, как я):
Код: Выделить всё
SpisokTablitsMes.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
cursor.moveToPosition(position);
String mesyac = cursor.getString(cursor.getColumnIndex("month"));
Log.d(LOG_TAG, "itemClick: position = " + position + ", id = "
+ id + ",месяц = " + mesyac);
if(mesyac.equals("Январь")||mesyac.equals("Март")||mesyac.equals("Май")){
Intent intent1 = new Intent(MainActivity.this, tabl1.class);
startActivity(intent1);
;}
else if (mesyac.equals("Апрель")||mesyac.equals("Июнь")){
Intent intent2 = new Intent(MainActivity.this, tabl2.class);
startActivity(intent2);
;}
else {
Intent intent4 = new Intent(MainActivity.this, tabl4.class);
startActivity(intent4);
;}
}
});
И да...спасибо за наводку
Чтобы не флудить в теме, допишу в этом посту свои догадки по поводу произошедшего.вероятно вы не правильно сравниваете строки
Так как if/else не кушает строки, то мы сравниваем значение строки mesyac с текстом "Месяц" с помощью оператора equals. И на выходе уже имеем бульку 1/0, которую if'у и надо было - цифроядный он.
Я молодец?