Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 25 фев 2017, 03:57

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 87 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: 26 янв 2012, 08:05 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1319
Благодарил (а): 0 раз.
Поблагодарили: 69 раз.
В этом уроке:

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

Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 23 июн 2016, 22:18, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 фев 2012, 12:31 

Зарегистрирован: 27 фев 2012, 12:14
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
здравствуйте. почему если добавить чекбоксы в пункты списка то контекстное меню не открывается?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 фев 2012, 16:35 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1319
Благодарил (а): 0 раз.
Поблагодарили: 69 раз.
caliskan писал(а):
здравствуйте. почему если добавить чекбоксы в пункты списка то контекстное меню не открывается?


Добавьте атрибут
Код: [ Загрузить ] [ Скрыть ]
Using XML Syntax Highlighting
  1. android:descendantFocusability="blocksDescendants"

в корневой layout пункта списка (LinearLayout в item.xml)

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 авг 2012, 11:05 

Зарегистрирован: 13 авг 2012, 15:16
Сообщений: 9
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Интересно, есть ли принципиальная разница между вызовом notifyDataSetChanged() и notifyDataSetInvalidated()?
Визуально, вроде, разницы нет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 авг 2012, 11:59 
Аватар пользователя

Зарегистрирован: 26 июл 2012, 11:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
dlnsk писал(а):
Интересно, есть ли принципиальная разница между вызовом notifyDataSetChanged() и notifyDataSetInvalidated()?
Визуально, вроде, разницы нет.

Это два противоположных метода:
notifyDataSetChanged() - мы вызываем, когда получили новые данные.
notifyDataSetInvalidated() - мы вызываем, когда произошла ошибка обновления данных.

Вот кусок кода из CursorAdapter'а, в котором это хорошо видно:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.     public Cursor swapCursor(Cursor newCursor) {
  2.         if (newCursor == mCursor) {
  3.             return null;
  4.         }
  5.         Cursor oldCursor = mCursor;
  6.         if (oldCursor != null) {
  7.             if (mChangeObserver != null) oldCursor.unregisterContentObserver(mChangeObserver);
  8.             if (mDataSetObserver != null) oldCursor.unregisterDataSetObserver(mDataSetObserver);
  9.         }
  10.         mCursor = newCursor;
  11.         if (newCursor != null) {
  12.             if (mChangeObserver != null) newCursor.registerContentObserver(mChangeObserver);
  13.             if (mDataSetObserver != null) newCursor.registerDataSetObserver(mDataSetObserver);
  14.             mRowIDColumn = newCursor.getColumnIndexOrThrow("_id");
  15.             mDataValid = true;
  16.             // notify the observers about the new cursor
  17.             notifyDataSetChanged();
  18.         } else {
  19.             mRowIDColumn = -1;
  20.             mDataValid = false;
  21.             // notify the observers about the lack of a data set
  22.             notifyDataSetInvalidated();
  23.         }
  24.         return oldCursor;
  25.     }


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 11:47 

Зарегистрирован: 10 сен 2012, 12:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Здравствуйте.

Пытаясь на практике применить знания, полученные по адаптерам, написал простое приложение из двух активити. В первой: дан список продуктов (parent), используется SimpleAdapter; во второй, их расшифровка (child), используется ArrayAdapter. Связь между активити осуществляется посредством Inetent, вот часть кода из parent и child:

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.        lv_simple.setOnItemClickListener(new OnItemClickListener() {
  2.             public void onItemClick(AdapterView<?> parent, View view,
  3.                     int position, long id) {
  4.  
  5.                 Intent intent = new Intent(getApplicationContext(), ChildActivity.class);
  6.                 intent.putExtra("value", position);
  7.                 startActivity(intent);
  8.             }
  9.         });
  10.  


Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.         Intent intent = getIntent();
  2.         value = intent.getIntExtra("value", pos);  // получаем значение position из MainActivity
  3.         onSelectionMade();
  4.     }
  5.     public void onSelectionMade() {
  6.         switch (value) {
  7.             case 0:         // выбран первый элемент родительского списка в MainActivity
  8.                 this.adapterDefine(vegetables);
  9.                 break;
  10.  


Включил также, описанную в уроках, возможность удаления и дополнения как родительского, так и child списка через ContextMenu.
С удалением и дополнением child списка все достаточно просто и понятно, а вот с parent у меня возникают вопросы, на которые мне не удается найти ответ. Например, удаляя какую либо позицию в parent, необходимо, чтобы весь ArrayList в child, который относится именно к этой позиции в child, очищался (удалялся?).
Тоже самое в отношении добавления новой позиции в parent. При ее создании автоматически должен создаваться безымянный элемент в child.
Как, все это, лучше сделать? Обращаться ли к адаптеру, проверяя пополнилась (уменьшилась) ли в нем data, или непосредственно к ArrayList? Какие существуют методы, позволяющие реализовать задачу.
Буду признателен за любую подсказку в каком направлении двигаться или действующий пример.

Спасибо.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 13:03 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 14:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
dil_android
В ChildActivity лучше передавать сами данные, но если используете какие то статические данные то тогда позицию, если же данные динамические то лучше эти данные упаковать в интент и в ChildActivity уже распарсить.
После каких либо манипуляций с данными следует вызывать метод notifyDataSetChanged() адаптера, этот метод обновляет данные.

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 17:03 

Зарегистрирован: 10 сен 2012, 12:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
rezak90,

как это сделать практически? Как можно понять из моего поста, данные динамические, удаляются и дополняются. Если, нет возможности дать подробную рекомендацию, то может знаете какой-либо подходящий пример или ссылку?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 17:07 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 14:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
динамически имеется в виду данные добавляются в программе, а статические это неизменяемые данные, то есть достаточно передать позицию на статические данные что бы отобразить их во второй активити. А если же данные добавляются в процессе то передав позицию на данных и в процессе передачи данные могут изменится и позиция уже будет указывать не на то что нужно.

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 17:13 

Зарегистрирован: 10 сен 2012, 12:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
notifyDataSetChanged() вызывается в обоих активити. Если есть простой, но подходящий под ситуацию пример, можно скинуть на dil_android@mail.ru
Это я понял, если есть удалить и добавить, то значит данные уже динамические по определению.
Спасибо


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 17:16 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 14:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
сейчас набросаю простой пример

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 19:00 

Зарегистрирован: 10 сен 2012, 12:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Спасибо большое, получил.

Попытался запустить, выдает
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
что это значит?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 19:48 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 14:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
мои извинения, то я не в Eclipse делал и по этому не запускается, главное посмотри код, там его совсем не много.
З.Ы. может быть если удалить build.xml то Eclipse его заново сгенерит...

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 окт 2012, 20:59 

Зарегистрирован: 10 сен 2012, 12:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Понял, спасибо, посмотрю завтра и дам знать через личку.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 фев 2013, 19:26 

Зарегистрирован: 26 ноя 2012, 11:34
Сообщений: 24
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
А как можно добавить элементы в начало списка, а не в конец?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 фев 2013, 14:07 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1319
Благодарил (а): 0 раз.
Поблагодарили: 69 раз.
dcbp писал(а):
А как можно добавить элементы в начало списка, а не в конец?

Можно: http://docs.oracle.com/javase/6/docs/api/java/util/List.html#add(int,%20E)
Метод
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. 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).

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 фев 2013, 16:12 

Зарегистрирован: 26 ноя 2012, 11:34
Сообщений: 24
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Спасибо! Весьма полезно!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2013, 18:41 

Зарегистрирован: 06 фев 2013, 21:47
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
в примере урока при добавлении нового пункта списка используется текст "sometext", а можно ли сделать чтоб при добавлении нового пункта списка он заполнялся бы переданными данными из другого активити. (к примеру в активити пишем в edittext имя, жмём добавить и в другом активити это имя отображается в пункте списка).
заранее спасибо за ответ.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2013, 18:58 

Зарегистрирован: 02 фев 2013, 01:03
Сообщений: 59
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Я конечно не спец, попробуй объявить:
public ListView lvSimple;
public SimpleAdapter sAdapter;
public ArrayList<Map<String, Object>> data;
public Map<String, Object> m;
и возможно они станут доступными из другого активити)))


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2013, 19:37 
Аватар пользователя

Зарегистрирован: 26 июл 2012, 11:42
Сообщений: 712
Благодарил (а): 6 раз.
Поблагодарили: 18 раз.
Озорная Свинья писал(а):
Я конечно не спец, попробуй объявить:
public ListView lvSimple;
public SimpleAdapter sAdapter;
public ArrayList<Map<String, Object>> data;
public Map<String, Object> m;
и возможно они станут доступными из другого активити)))

Для передачи данных между активити, есть другие способы, они рассмотрены в других уроках.
А данный способ, не будет работать.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 87 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 4 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB