Как да модифицирам ListView елемент в Android?

Започвам да изучавам Android и искам да знам дали има някаква опция в Android, която ви позволява да променяте всеки елемент или изглед (не знам как точно се наименува, имам предвид всеки от елементите от ArrayList, който показвате в ListView).

Е, направих ListView, който ще покаже някои книги, които се намират в ArrayList, наречен "books".

Направих персонализиран адаптер, който свързвам с ListView, за да показва всеки елемент със съответното оформление в приложението. Също така имам клас "книга" за всеки елемент, който ще бъде показан в ListView.

Освен това направих намерение, което извиквам от MainActivity със startForActivityResult(), което обработвам в клас Book и което се връщам към MainActivity с всички данни на книга с метода setResult и получавам информацията с onActivityResult() и requestCode.

Така че нямам никакъв проблем да добавя елементи към ListView, просто имам проблеми, ако искам да променя някои от елементите (или изгледи), които се намират в ListView (например ако имам заглавие и автор на книга, ако въведа грешна информация, искам да имам опцията да я променя).

Имам, че в същия момент, в който щракнете върху някои от елементите на ListView, ще се покаже ново оформление, за да се промени информацията, че е грешна, така че използвам метода setOnItemClickListener със събитие onItemClick на персонализирания адаптер, който създадох преди . Тук извиквам новото намерение за промяна на грешната информация с метода startActivityForResult().

Направих същото като преди, за да добавя нов елемент, но вместо да добавя нов елемент с custom_adapter.addBook(title,author), искам да знам дали има някаква опция за създаване на нещо подобно: custom_adapter.modify(title,author) ) или custom_adapter.update(title,author), имам предвид, когато сте променили всички елементи, които са грешни в книга (например EditText, които са били "title") и имате цялата информация в класа MainActivity (тъй като сте го върнали със setResult), как да го поставите отново в същия елемент, като го актуализирате в custom_adapter, а също и в ArrayList.

Търсих го в интернет, но не намерих нищо.

Съжалявам, ако владея лош английски, но очаквам, че може да бъде разбран.

Благодаря ти много!


person Francisco Romero    schedule 14.02.2015    source източник
comment
По принцип премахвате или добавяте елементи чрез адаптера. Публикувам и отговор.   -  person The Original Android    schedule 14.02.2015


Отговори (3)


Ако разбирам проблема ви правилно - можете просто да промените ArrayList от тип Book, който поддържа вашия ArrayAdapter.

Така че, ако знаете какъв Book обект искате да модифицирате, можете просто да направите промените в самия Book обект. Докато този Book е препратка към същия обект, който първоначално сте добавили към ArrayList, с който сте инстанциирали вашия ArrayAdapter, тогава можете да извикате custom_adapter.notifyDataSetChanged(), за да кажете на адаптера да преначертае своите подчинени изгледи с новите данни.

person bdnwang    schedule 14.02.2015
comment
Е, може би не се обясних правилно. Това, което искам да направя, е след като настроя всичките си елементи в ListView, ако искам да променя един от тях, правя щракване върху него и се появява ново оформление. В това оформление ще има 2 EditText със заглавието и автора на нашата книга със стара информация, когато я променя и натисна бутона Изпращане, съжалявам за тази информация в MainActivity. Опитах се да използвам custom_adapter.notifyDataSetChanged(), но не знам как да направя точна препратка към елемента, който натиснах, така че имам информацията, но не знам как да ги актуализирам в персонализирания адаптер и двата ArrayList. Благодаря ти - person Francisco Romero; 14.02.2015
comment
А, добре – опитахте ли да предадете позицията на избрания елемент на намерението при стартиране на дейността и след това да върнете същата позиция с резултата от дейността. След това променяте книгата на дадената позиция в адаптера. Надяваме се, че това работи. - person bdnwang; 14.02.2015

Има някои добри примерни кодове в Интернет, но трябва да разберете кода за вашите цели. И така...ето едно начало, погледнете Използване на ArrayAdapter с ListView. Кодът показва използването на ArrayAdapter с метода getView(). И се надявам да покаже как да определите слушателите, от които се нуждаете.

Какво ще кажете за това като начало? Забавлявай се...

person The Original Android    schedule 14.02.2015

Благодаря ви много за цялата помощ, която ми оказахте. Много съм доволен от теб. :)

И накрая, просто изпращам информацията с пакет, когато започнах намерението, също с позицията. И след това просто използвах тази позиция, за да задам новата информация за моите елементи (в моя случай, книги).

Отново много благодаря ;)

person Francisco Romero    schedule 16.02.2015