Wątek przeniesiony 2017-10-09 13:01 z Java przez hauleth.

Android service dodawanie nowych obiektów do layout'u

0

Mam apke działającą na telefonie, dorobiłem do niej serwis który ma dodać nową funkcjonalność (labelke i przycisk). W apce mam plik doc_pos.xml w którym jest aktualny wygląd aplikacji. Chcę by serwis dodał tam w jakiś sposób pomiędzy dwa elementy tą labelke i przycisk. Jak można z wysokości serwisu dodać te dwie rzeczy? To ma działać tylko gdy jest włączony serwis.

EDIT. Może w serwisie zdublować ten plik, dodać do niego to co chcę i zmusić apkę, by z niego(tego pliku po stronie serwisu korzystała?

0

doc_pos.xml to jest normalny plik zawierajacy androidowy layout ? jezeli tak to mozesz zrobic cos w stylu:

dodac tam tzw. place holder w formie fragmentu ktory bedzie zawieral dodatkowe rzeczy ktore chcesz dodac do widoku. i dodawac ten fragment kiedy serwis startuje / usuwac na serwis stop

mozesz tez dodac tam statycznie elementy ktore chcesz zeby sie pojawialy i znikaly i zarzadzac ich widocznoscia (visibility = visible lub visibility = gone)

0

@Pendzoncy jelen a dałoby się to załatwić jakoś programistycznie bardziej? Myślałem o przeciążeniu addView(View v, int position), tylko nie wiem, czy to(obiekt zawiera Button) bezstanowe da się jakoś zserializować, chyba właśnie nie :(

0

Mozesz zrobic tak jak piszesz tzn..
tworzysz sobie Twoj dodatkowy layout.xml ktory bedzie zawieral dodatkowe rzeczy, (czyli jakas tabelke i button)
robisz inflate z tego layout zeby miec jego View i wypelniasz go danymi
robisz addView na odpowiedniej pozycji

poczytaj o dynamicznym dodawaniu widokow i o dynamicznej "inflacji" widokow

mozliwe ze bedziesz musial utworzyc sobie MyCustomView extends JakisLayout zeby latwiej Ci bylo to wypelnic danymi

pozniej po addView robisz invalidate lub requestLayout zeby android odswiezyl sobie widok razem z dodatkowymi rzeczami

jak czegos nie ogarniasz daj znac postaram sie napisac jakis psedo-kod

0

Kombinujesz jak koń pod górę. Do dynamicznego zamieniania fragmentów layoutu wymyślono, jak sama nazwa wskazuje, fragmenty.

Poczytaj jak się przekazuje zdarzenia z serwisu do wątku gui, jest na to kilka sposobów (bindowanie z activity, ResultReceiver itd) . Wątek gui otrzyma zdarzenie z serwisu i podmieni fragment w twoim oknie, to tyle.

0

@Pendzoncy jelen da się jakoś już do istniejącego widoku wrzucić w jego środek inny widok? Próbowałem właśnie przez addView(View v, int index), index znajduje mi znakomicie, ale rzuca mi błędem IndexOutOfBound, ale to pewnie dlatego, że index pod który chce wrzucić jest w połowie tablicy widoków. Architektura apki nie pozwala mi użyć fragmentu. Nie chce drastycznie przeprojektowywania apki, bo za dużo byłoby do zrobienia. Muszę to jakoś sprytnie wstrzyknąć

0

A zatem architektura jest zła.

0

P.S. widoki możesz wrzucać tylko do widoków dziedziczących po ViewGroup, czyli takich, które definiują layout - domyślne to np LinearLayout albo TableLayout.

Do tego co chcesz zrobić, wymyślono fragmenty.

0

jw. Kwestia doswiadczenia i wiedzy kiedy uzywac jakich komponentow w androidzie.
postaraj sie to zrobic na fragmentach

1 użytkowników online, w tym zalogowanych: 0, gości: 1