Урок 52. SimpleCursorAdapter, пример использования
Re: Урок 52. SimpleCursorAdapter, пример использования
Конечно можно - в любом удобном виде. Я использую и long и в виде строки с датой (где нужно только на экран выводить\вводить). Только нужно учитывать то, что если нужно будет делать запросы, сортировки по дате - то удобнее long.
Можно еще в формате YYYYMMDD хранить..
Можно два поля хранить даже.
Можно еще в формате YYYYMMDD хранить..
Можно два поля хранить даже.
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: Урок 52. SimpleCursorAdapter, пример использования
подскажите пожалуйста . Есть база данных :
1 Петя
2 Вася
3 Егор
нужно вывести эту базу в диалоговый список выбора на экране (как в уроке 63) , добавив два поля в сам список , в начале и в конце , вот так :
<Отсутствует>
Петя
Вася
Егор
<Добавить>
самому мне , кроме как копирование курсора в массив , добавление к массиву необходимых строк и вывода в список, уже не из SimpleCursorAdapter , а из ArrayAdapter , ничего в голову не приходит . Может есть более разумное решение ?
1 Петя
2 Вася
3 Егор
нужно вывести эту базу в диалоговый список выбора на экране (как в уроке 63) , добавив два поля в сам список , в начале и в конце , вот так :
<Отсутствует>
Петя
Вася
Егор
<Добавить>
самому мне , кроме как копирование курсора в массив , добавление к массиву необходимых строк и вывода в список, уже не из SimpleCursorAdapter , а из ArrayAdapter , ничего в голову не приходит . Может есть более разумное решение ?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 52. SimpleCursorAdapter, пример использования
Читайте дальше. В 55 уроке об этом будет написано.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 52. SimpleCursorAdapter, пример использования
Спасибо ,что откликнулись , к сожалению я уже прочитал урок 55 и понял из него только то , что метод AddHeaderView (или что то подобное) отсутствует в onCreateDialog или я не знаю , как его применить ..
возможно я не совсем правильно задал вопрос , есть таблицы в базе данных со списками значений , нужно , в зависимости от ситуации выводить диалоговые окна с этими списками (для каждой ситуации - свой ) , к каждому списку добавить : сверху <Отсутствует> - выход из диалогового окна без изменений и снизу <Добавить> - добавить в выводимую в данное время таблицу новый элемент . Клик на элементах просто возвращает их id в таблице .
сейчас ( без элементов <отутствует-добавить> у меня это диалоговое окно выводиться таким образом , для одной таблицы table1)
не хотелось бы все переписывать по другому
возможно я не совсем правильно задал вопрос , есть таблицы в базе данных со списками значений , нужно , в зависимости от ситуации выводить диалоговые окна с этими списками (для каждой ситуации - свой ) , к каждому списку добавить : сверху <Отсутствует> - выход из диалогового окна без изменений и снизу <Добавить> - добавить в выводимую в данное время таблицу новый элемент . Клик на элементах просто возвращает их id в таблице .
сейчас ( без элементов <отутствует-добавить> у меня это диалоговое окно выводиться таким образом , для одной таблицы table1)
Код: Выделить всё
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:cursor_dialog = database.query("table1",null, null, null, null, null, null);break;
}
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setCursor(cursor_dialog, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
idChoiceDialog = cursor_dialog.getInt(0);
updateDisplay();
}
},"name");
return adb.create();- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 52. SimpleCursorAdapter, пример использования
Я тут заглянул по капот к классу AlertDialog.
Похоже, что при вызове метода create() у класса AlertDialog.Builder, адаптер сразу в список не устанавливается. Делается это только при показе диалога.
То-есть, можно поступить так:
[syntax=java]//... Создание билдера ...
// Затем создаем диалог но не возвращаем его.
AlertDialog dialor = adb.create();
ListView list = dialor.getListView();
// Ставим свои футеры и хедеры для списка list ...
return dialor;[/syntax]
Кстати, если это действительно работает, не плохо бы об этом упомянуть в уроках про AlertDialog.
Похоже, что при вызове метода create() у класса AlertDialog.Builder, адаптер сразу в список не устанавливается. Делается это только при показе диалога.
То-есть, можно поступить так:
[syntax=java]//... Создание билдера ...
// Затем создаем диалог но не возвращаем его.
AlertDialog dialor = adb.create();
ListView list = dialor.getListView();
// Ставим свои футеры и хедеры для списка list ...
return dialor;[/syntax]
Кстати, если это действительно работает, не плохо бы об этом упомянуть в уроках про AlertDialog.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 52. SimpleCursorAdapter, пример использования
кстати , это действительно работает !!!KamiSempai писал(а): ... Кстати, если это действительно работает ...
пока набросал на скорую руку , чтоб проверить , без реагирования на клик , нижнего элемента и тп. , поздно у меня уже
Код: Выделить всё
protected Dialog onCreateDialog(int id) {
numberDialog = id;
switch (id) {
case 0:cursor_dialog = database.query("table1",null, null, null, null, null, null);break;
}
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setCursor(cursor_dialog, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
idChoiceDialog = cursor_dialog.getInt(0);
updateDisplay();
}
}, "name");
AlertDialog d = adb.create();
ListView list = d.getListView();
View v = getLayoutInflater().inflate(android.R.layout.simple_list_item_1, null);
((TextView)v.findViewById(android.R.id.text1)).setText("Отсутствует");
list.addHeaderView(v);
return d;
}- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 52. SimpleCursorAdapter, пример использования
На сколько я понимаю, это вопрос?Pavel A писал(а):...какой там layout AlertDialog для списков использует ...
Если да, то вот ссылка на исходники где создается список: http://www.grepcode.com/file/repository ... r.java#801
Там в зависимости от выбранных настроек выбирается нужный layout. Найдите свой и используйте его.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 52. SimpleCursorAdapter, пример использования
Да не столько вопрос , рассуждение вслух , но за ссылку все равно спасибо . По исходнику получается , что используется select_dialog_item.xml , однако на самом деле используется select_dialog_item_holo.xml / Что самое печальное , не смотря на то , что данный вид отображения есть в SDK , Android Studio его в упор не видит (и в исходниках AlertDialog он не используется ), в общем перенес из SDK в проект , но что то странно это как то ..
в результате получилось следующее , может кому пригодиться .. готовое решение :Диалоговый список с хидером и футером ,реагирующими на касание
так же хотелось бы выслушать конструктивную критику по коду , только пожалуйста не о том , что onGreateDialog и связанные с ним методы обозначены , как устаревшие . Я вижу , что они зачеркнуты в IDE . разбираться с фрагментами мне пока нет времени
в результате получилось следующее , может кому пригодиться .. готовое решение :Диалоговый список с хидером и футером ,реагирующими на касание
Код: Выделить всё
protected Dialog onCreateDialog(int id) {
//таблица элементов "table1" с полем "name" их именований
Cursor cursor_dialog = database.query("table1",null, null, null, null, null, null);break;
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setTitle("Элементы");
adb.setCursor(cursor_dialog, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) dismissDialog(0); // нажали хидер [отменить] , закрыть диалоговое окно
else if (which == cursor_dialog.getCount() + 1) DataBase.addNewItem(table1); //футер [добавить] - вызываем
//DataBase.addNewItem для добавления элемента
else updateDisplay(); // действия по клику на элементах списка
}
}, "name");
AlertDialog d = adb.create();
ListView list = d.getListView();
// header.xml -шаблон для оформления вывода элемента с полем TextView text1
View v_h = getLayoutInflater().inflate(R.layout.header, null);
((TextView)v_h.findViewById(android.R.id.text1)).setText("[Отменить]");
list.addHeaderView(v_h);
View v_f = getLayoutInflater().inflate(R.layout.header, null);
((TextView)v_f.findViewById(android.R.id.text1)).setText("[Добавить]");
list.addFooterView(v_f);
return d;
}
Последний раз редактировалось Pavel A 30 сен 2013, 07:13, всего редактировалось 6 раз.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 52. SimpleCursorAdapter, пример использования
Мне не нравятся имена переменных. Например, adb. Как это понимать? Я то знаю, что это означает AlertDialogBuilder, но если кода будет много сразу и не поймешь. Толи это AlertDialogBuilder толи AndroidDataBase.Pavel A писал(а):так же хотелось бы выслушать конструктивную критику по коду
Бросайте эту вредную студенческую привычку именования переменных.
Пишите как есть:
adb - alertDialogBuilder или dialogBuilder;
d - dialog;
v_h - headerView;
v_f - footerView;
.... и так далее.
По коду. Слушатели нажатия на текст футере и хедере не к месту. Их нажатия будут обработаны DialogInterface.OnClickListener.
Если wich = 0 значит нажат хедер, если футер wich = cursor_dialog.getCount() + 1. Индекс остальных строк будет сдвинут на 1 из за хедера. Если этого не учитывать можно напороться на ошибку.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 52. SimpleCursorAdapter, пример использования
по переменным - мне просто их лень писать , если честно
пока тестирую , как будет работать , это код не из полноценного проекта .. а вообще , в "смутные" 90-ые ,под "Спектрум" ,когда писал на ассемблере , метки были из серии DFHYDFG - просто по клавиатуре потарабанил - и только намного позднее я узнал , что оказывается это анекдот такой
// в общем , это лирика все , хотел сказать , что непонятные переменные меня не пугают уже много лет
за объяснения по слушателям огромное спасибо .. сам я только начинаю еще с Java вообще и android-ом в частности .. исправил в последнем примере у себя
за объяснения по слушателям огромное спасибо .. сам я только начинаю еще с Java вообще и android-ом в частности .. исправил в последнем примере у себя
Re: Урок 52. SimpleCursorAdapter, пример использования
Доброе время суток!
Попробовал сделать добавление и редактирование данных по Intent, с добавление все хорошо получилось, а вот с редактированием и сохранением пока никак.
Падает на попытке выполнить запрос с забором данных
Заранее благодарен!
З.Ы.
Подправил код.
Попробовал сделать добавление и редактирование данных по Intent, с добавление все хорошо получилось, а вот с редактированием и сохранением пока никак.
Падает на попытке выполнить запрос с забором данных
Код: Выделить всё
lvData.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
long id = arg2;
Intent i = db.getData(id);
int getid = i.getIntExtra("id", 1);
String title = i.getStringExtra("title");
String body = i.getStringExtra("body");
String data = i.getStringExtra("data");
Intent intent = new Intent(getApplicationContext(), TasksEdit.class);
intent.putExtra("id", getid);
intent.putExtra("title", title.toString());
intent.putExtra("body", body.toString());
intent.putExtra("date", data.toString());
startActivityForResult(intent, 2);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {Toast.makeText(this, "Wrong result", Toast.LENGTH_SHORT).show(); return;}
switch (requestCode) {
case 1:
String title = data.getStringExtra("title");
String body = data.getStringExtra("body");
db.addRec(title, body,
new java.text.SimpleDateFormat("dd.MM.yy - HH:mm").format(java.util.Calendar.getInstance ().getTime()));
cursor.requery();
break;
case 2:
ContentValues c = null;
int idData = 0;
int id = data.getIntExtra("id", idData);
c.put("title", data.getStringExtra("title"));
c.put("body", data.getStringExtra("body"));
db.Update(id, c);
cursor.requery();
break;
default:
break;
}
}
Код: Выделить всё
///DB.class
public Intent getData(long id) {
String s = String.valueOf(id);
Intent cv = new Intent();
cv = (Intent) mDB.query(DB_TABLE, null, COLUMN_ID + " = " + id, null, s, s, s);
cv.putExtra("id", COLUMN_ID);
cv.putExtra("title", COLUMN_TITLE);
cv.putExtra("body", COLUMN_BODY);
cv.putExtra("date", COLUMN_DATE);
return cv;
}
public void Update(long id, ContentValues cv) {
mDB.update("mytab", cv, "id = " + id, null);
}
З.Ы.
Подправил код.
Re: Урок 52. SimpleCursorAdapter, пример использования
Обновил код, но все же пока не работает
Re: Урок 52. SimpleCursorAdapter, пример использования
где падает не понятно, какой лог тоже
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: Урок 52. SimpleCursorAdapter, пример использования
Извините за беспокойство, уже разобрался))
Re: Урок 52. SimpleCursorAdapter, пример использования
Нигде не удалось найти примера изменения параметров (цвет или шрифт) элемента списка динамично, т.е. не в начале построения списка, как в уроках 49, 50. К примеру, менять цвет третьего элемента списка каждые 10сек. (используя SimpleCursorAdapter).
Заранее благодарен за совет.
Заранее благодарен за совет.
Re: Урок 52. SimpleCursorAdapter, пример использования
Это настолько сложно реализовать или просто форум не шибко активен?Idol писал(а):Нигде не удалось найти примера изменения параметров (цвет или шрифт) элемента списка динамично, т.е. не в начале построения списка, как в уроках 49, 50. К примеру, менять цвет третьего элемента списка каждые 10сек. (используя SimpleCursorAdapter).
Кто-нибудь хотя бы намекните в какую сторону копать.
Re: Урок 52. SimpleCursorAdapter, пример использования
кастомный адаптер, в методе bindView меняем и цвет и шрифт и что хотим элементу... на счёт 10 сек то здесь вариантов куча, от запуска TimerTaska каждому item'y до запуска сервиса в котором крутится тот же TimerTask и каждые 10 сек будет обновлять cursorIdol писал(а):Это настолько сложно реализовать или просто форум не шибко активен?Idol писал(а):Нигде не удалось найти примера изменения параметров (цвет или шрифт) элемента списка динамично, т.е. не в начале построения списка, как в уроках 49, 50. К примеру, менять цвет третьего элемента списка каждые 10сек. (используя SimpleCursorAdapter).
Кто-нибудь хотя бы намекните в какую сторону копать.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 52. SimpleCursorAdapter, пример использования
Я использую SimpleCursorAdapter.ViewBinder и меняю там формат текста и у меня есть место откуда вызывать изменение элементов списка (CountDownTimer). Однако я не могу уловить, как вызывать конкретный элемент списка. Как получить textView элемента списка?rezak90 писал(а):кастомный адаптер, в методе bindView меняем и цвет и шрифт и что хотим элементу... на счёт 10 сек то здесь вариантов куча, от запуска TimerTaska каждому item'y до запуска сервиса в котором крутится тот же TimerTask и каждые 10 сек будет обновлять cursor
Неужели в моем дизайне это не возможно и необходимо все переписать с bindView?
Re: Урок 52. SimpleCursorAdapter, пример использования
http://stackoverflow.com/questions/9658 ... f-textview
в setViewValue меняется цвет текста
в setViewValue меняется цвет текста
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 52. SimpleCursorAdapter, пример использования
Спасибо за помощь.rezak90 писал(а):http://stackoverflow.com/questions/9658 ... f-textview
в setViewValue меняется цвет текста
Я правильно понимаю, что каждый раз, когда я хочу поменять цвет одного элемента списка, необходимо перерисовать весь список заново (кстати как это вызвать из произвольного места программы?). И не существует возможности перерисовать лишь этот изменяемый элемент?
Как найти необходимый элемент в setViewValue? У курсора нет метода типа getItem(position).
Если элемент списка состоит из нескольких объектов (textViews, etc), нужно прописать установку цвета в каждом объекте отдельно или есть возможность поменять цвет сразу у всего элемента списка?