Урок 51. SimpleAdapter, добавление и удаление записей
Урок 51. SimpleAdapter, добавление и удаление записей
В этом уроке:
- используем SimpleAdapter для построения списка
- добавляем и удаляем записи в списке
[url=http://www.startandroid.ru/ru/uroki/vse ... l:1dqdt8fi]Click here to read this article![/url:1dqdt8fi]
- используем SimpleAdapter для построения списка
- добавляем и удаляем записи в списке
[url=http://www.startandroid.ru/ru/uroki/vse ... l:1dqdt8fi]Click here to read this article![/url:1dqdt8fi]
Последний раз редактировалось damager82 08 май 2017, 16:00, всего редактировалось 4 раза.
Re: Урок 51. SimpleAdapter, добавление и удаление записей
здравствуйте. почему если добавить чекбоксы в пункты списка то контекстное меню не открывается?
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Добавьте атрибутcaliskan писал(а):здравствуйте. почему если добавить чекбоксы в пункты списка то контекстное меню не открывается?
Код: Выделить всё
android:descendantFocusability="blocksDescendants"
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Интересно, есть ли принципиальная разница между вызовом notifyDataSetChanged() и notifyDataSetInvalidated()?
Визуально, вроде, разницы нет.
Визуально, вроде, разницы нет.
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Это два противоположных метода:dlnsk писал(а):Интересно, есть ли принципиальная разница между вызовом notifyDataSetChanged() и notifyDataSetInvalidated()?
Визуально, вроде, разницы нет.
notifyDataSetChanged() - мы вызываем, когда получили новые данные.
notifyDataSetInvalidated() - мы вызываем, когда произошла ошибка обновления данных.
Вот кусок кода из CursorAdapter'а, в котором это хорошо видно:
Код: Выделить всё
public Cursor swapCursor(Cursor newCursor) {
if (newCursor == mCursor) {
return null;
}
Cursor oldCursor = mCursor;
if (oldCursor != null) {
if (mChangeObserver != null) oldCursor.unregisterContentObserver(mChangeObserver);
if (mDataSetObserver != null) oldCursor.unregisterDataSetObserver(mDataSetObserver);
}
mCursor = newCursor;
if (newCursor != null) {
if (mChangeObserver != null) newCursor.registerContentObserver(mChangeObserver);
if (mDataSetObserver != null) newCursor.registerDataSetObserver(mDataSetObserver);
mRowIDColumn = newCursor.getColumnIndexOrThrow("_id");
mDataValid = true;
// notify the observers about the new cursor
notifyDataSetChanged();
} else {
mRowIDColumn = -1;
mDataValid = false;
// notify the observers about the lack of a data set
notifyDataSetInvalidated();
}
return oldCursor;
}
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Здравствуйте.
Пытаясь на практике применить знания, полученные по адаптерам, написал простое приложение из двух активити. В первой: дан список продуктов (parent), используется SimpleAdapter; во второй, их расшифровка (child), используется ArrayAdapter. Связь между активити осуществляется посредством Inetent, вот часть кода из parent и child:
Включил также, описанную в уроках, возможность удаления и дополнения как родительского, так и child списка через ContextMenu.
С удалением и дополнением child списка все достаточно просто и понятно, а вот с parent у меня возникают вопросы, на которые мне не удается найти ответ. Например, удаляя какую либо позицию в parent, необходимо, чтобы весь ArrayList в child, который относится именно к этой позиции в child, очищался (удалялся?).
Тоже самое в отношении добавления новой позиции в parent. При ее создании автоматически должен создаваться безымянный элемент в child.
Как, все это, лучше сделать? Обращаться ли к адаптеру, проверяя пополнилась (уменьшилась) ли в нем data, или непосредственно к ArrayList? Какие существуют методы, позволяющие реализовать задачу.
Буду признателен за любую подсказку в каком направлении двигаться или действующий пример.
Спасибо.
Пытаясь на практике применить знания, полученные по адаптерам, написал простое приложение из двух активити. В первой: дан список продуктов (parent), используется SimpleAdapter; во второй, их расшифровка (child), используется ArrayAdapter. Связь между активити осуществляется посредством Inetent, вот часть кода из parent и child:
Код: Выделить всё
lv_simple.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(getApplicationContext(), ChildActivity.class);
intent.putExtra("value", position);
startActivity(intent);
}
});
Код: Выделить всё
Intent intent = getIntent();
value = intent.getIntExtra("value", pos); // получаем значение position из MainActivity
onSelectionMade();
}
public void onSelectionMade() {
switch (value) {
case 0: // выбран первый элемент родительского списка в MainActivity
this.adapterDefine(vegetables);
break;
С удалением и дополнением child списка все достаточно просто и понятно, а вот с parent у меня возникают вопросы, на которые мне не удается найти ответ. Например, удаляя какую либо позицию в parent, необходимо, чтобы весь ArrayList в child, который относится именно к этой позиции в child, очищался (удалялся?).
Тоже самое в отношении добавления новой позиции в parent. При ее создании автоматически должен создаваться безымянный элемент в child.
Как, все это, лучше сделать? Обращаться ли к адаптеру, проверяя пополнилась (уменьшилась) ли в нем data, или непосредственно к ArrayList? Какие существуют методы, позволяющие реализовать задачу.
Буду признателен за любую подсказку в каком направлении двигаться или действующий пример.
Спасибо.
Re: Урок 51. SimpleAdapter, добавление и удаление записей
dil_android
В ChildActivity лучше передавать сами данные, но если используете какие то статические данные то тогда позицию, если же данные динамические то лучше эти данные упаковать в интент и в ChildActivity уже распарсить.
После каких либо манипуляций с данными следует вызывать метод notifyDataSetChanged() адаптера, этот метод обновляет данные.
В ChildActivity лучше передавать сами данные, но если используете какие то статические данные то тогда позицию, если же данные динамические то лучше эти данные упаковать в интент и в ChildActivity уже распарсить.
После каких либо манипуляций с данными следует вызывать метод notifyDataSetChanged() адаптера, этот метод обновляет данные.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 51. SimpleAdapter, добавление и удаление записей
rezak90,
как это сделать практически? Как можно понять из моего поста, данные динамические, удаляются и дополняются. Если, нет возможности дать подробную рекомендацию, то может знаете какой-либо подходящий пример или ссылку?
как это сделать практически? Как можно понять из моего поста, данные динамические, удаляются и дополняются. Если, нет возможности дать подробную рекомендацию, то может знаете какой-либо подходящий пример или ссылку?
Re: Урок 51. SimpleAdapter, добавление и удаление записей
динамически имеется в виду данные добавляются в программе, а статические это неизменяемые данные, то есть достаточно передать позицию на статические данные что бы отобразить их во второй активити. А если же данные добавляются в процессе то передав позицию на данных и в процессе передачи данные могут изменится и позиция уже будет указывать не на то что нужно.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 51. SimpleAdapter, добавление и удаление записей
notifyDataSetChanged() вызывается в обоих активити. Если есть простой, но подходящий под ситуацию пример, можно скинуть на dil_android@mail.ru
Это я понял, если есть удалить и добавить, то значит данные уже динамические по определению.
Спасибо
Это я понял, если есть удалить и добавить, то значит данные уже динамические по определению.
Спасибо
Re: Урок 51. SimpleAdapter, добавление и удаление записей
сейчас набросаю простой пример
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Спасибо большое, получил.
Попытался запустить, выдает
C:\Documents and Settings\Admin\Мои документы\NetBeansProjects\List\build.xml:90: Cannot find C:\Android\android-sdk\tools\ant\build.xml imported from C:\Documents and Settings\Admin\Мои документы\NetBeansProjects\List\build.xml
что это значит?
Попытался запустить, выдает
C:\Documents and Settings\Admin\Мои документы\NetBeansProjects\List\build.xml:90: Cannot find C:\Android\android-sdk\tools\ant\build.xml imported from C:\Documents and Settings\Admin\Мои документы\NetBeansProjects\List\build.xml
что это значит?
Re: Урок 51. SimpleAdapter, добавление и удаление записей
мои извинения, то я не в Eclipse делал и по этому не запускается, главное посмотри код, там его совсем не много.
З.Ы. может быть если удалить build.xml то Eclipse его заново сгенерит...
З.Ы. может быть если удалить build.xml то Eclipse его заново сгенерит...
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Понял, спасибо, посмотрю завтра и дам знать через личку.
Re: Урок 51. SimpleAdapter, добавление и удаление записей
А как можно добавить элементы в начало списка, а не в конец?
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Можно: http://docs.oracle.com/javase/6/docs/ap ... (int,%20E)dcbp писал(а):А как можно добавить элементы в начало списка, а не в конец?
Метод
Код: Выделить всё
void add(int index, E element)
Inserts the specified element at the specified position in this list (optional operation). Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices).
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Спасибо! Весьма полезно!
Re: Урок 51. SimpleAdapter, добавление и удаление записей
в примере урока при добавлении нового пункта списка используется текст "sometext", а можно ли сделать чтоб при добавлении нового пункта списка он заполнялся бы переданными данными из другого активити. (к примеру в активити пишем в edittext имя, жмём добавить и в другом активити это имя отображается в пункте списка).
заранее спасибо за ответ.
заранее спасибо за ответ.
-
- Сообщения: 59
- Зарегистрирован: 02 фев 2013, 00:03
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Я конечно не спец, попробуй объявить:
public ListView lvSimple;
public SimpleAdapter sAdapter;
public ArrayList<Map<String, Object>> data;
public Map<String, Object> m;
и возможно они станут доступными из другого активити)))
public ListView lvSimple;
public SimpleAdapter sAdapter;
public ArrayList<Map<String, Object>> data;
public Map<String, Object> m;
и возможно они станут доступными из другого активити)))
Re: Урок 51. SimpleAdapter, добавление и удаление записей
Для передачи данных между активити, есть другие способы, они рассмотрены в других уроках.Озорная Свинья писал(а):Я конечно не спец, попробуй объявить:
public ListView lvSimple;
public SimpleAdapter sAdapter;
public ArrayList<Map<String, Object>> data;
public Map<String, Object> m;
и возможно они станут доступными из другого активити)))
А данный способ, не будет работать.