Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- NvidiaRTX: Xiaomi Electric Scooter 6 Max: Az első rollerem
- Luck Dragon: Asszociációs játék. :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Candy: AOOSTAR WTR PRO – NAS, alkoss, gyarapíts
- Gurulunk, WAZE?!
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- balojazz: Szódakészítés üzembiztosan és olcsón! Figyelem, csak hardcore szódázóknak!
- Parci: Milyen mosógépet vegyek?
- gerner1
Új hozzászólás Aktív témák
-
Karma
félisten
válasz
#39560925
#3218
üzenetére
Azt semmiképp se tartom jó ötletnek, hogy a MainActivity közvetlenül ismerje az ExceptionsFragment példányt. Mivel a ViewPager is virtualizál (azaz a ListViewhoz hasonlóan csak a látható vagy szomszédos viewkat tartja életben), elég kusza helyzetek alakulhatnak ki.
Hogy ezt hogyan kerüld el, van pár lehetőség.
Az első a klasszikus jávás Listener minta. Az activityben definiálsz egy Listener interfészt, amit a fragment megvalósít, valamint egy kis ceremóniát, hogy fel lehessen rá iratkozni. A fragment onAttach metódusában regisztrál, onDetachban pedig deregisztrál - ameddig össze van kötve, az activity tud neki jelezni. Mondjuk a konkrét activity osztályt is elfedném akkor már.
ExceptionChangeListener.java:
public interface ExceptionChangeListener {
void onExceptionsChanged();
}ExceptionSource.java:
public interface ExceptionSource {
boolean addExceptionChangeListener(ExceptionChangeListener listener);
boolean removeExceptionChangeListener(ExceptionChangeListener listener);
}MainActivity.java:
public class MainActivity extends AppCompatActivity implements ExceptionSource {
private final Set<ExceptionChangeListener> mListeners = new HashSet<ExceptionChangeListener>();
...
public boolean addExceptionChangeListener(ExceptionChangeListener listener) {
return mListeners.add(listener);
}
public boolean removeExceptionChangeListener(ExceptionChangeListener listener) {
return mListeners.remove(listener);
}
... amikor módosítottad a listát, hívd meg ezt ...
private void notifyListeners() {
for (ExceptionChangeListener listener : mListeners) {
listener.onExceptionsChanged();
}
}
}ExceptionsFragment.java:
public class ExceptionsFragment extends Fragment implements ExceptionChangeListener {
@Override
public void onAttach (Activity activity) {
super.onAttach(activity);
if (activity instanceof ExceptionSource) {
((ExceptionSource)activity).addExceptionChangeListener(this);
}
}
@Override
public void onDetach() {
if (getActivity() instanceof ExceptionSource) {
((ExceptionSource)getActivity()).removeExceptionChangeListener(this);
}
super.onDetach();
}
@Override
public void onExceptionsChanged() {
adapter.notifyDataSetChanged();
}
}Huh, ez elég hosszú lett. A másik kettőbe inkább nem megyek bele így nyilvánosan kód szinten.
A második az lenne, hogy a fragmented onAttach/onDetach időben egy BroadcastReceivert indít el, az activity pedig Intenteket dobál, ha változás van. Ez lehet közvetlenül a sendBroadcast metódussal, vagy LocalBroadcastManagerrel. Lazább csatolás, de elég sok ceremónia.
A harmadik pedig egy event bus bevezetése (pl. Otto), ahol a logika ugyanaz mint a másodikban, csak kevesebb extra kód (eltekintve a lib dependenciától). Én így 2015-ben egyébként ezt az utat javaslom.
Új hozzászólás Aktív témák
- sziku69: Fűzzük össze a szavakat :)
- Anglia - élmények, tapasztalatok
- A Honor profi iPhone másolásban
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Futás, futópályák
- Nem fut az Intel grafikus vezérlőin az év egyik legjobban várt címe
- TCL LCD és LED TV-k
- exHWSW - Értünk mindenhez IS
- LEGO klub
- PROHARDVER! feedback: bugok, problémák, ötletek
- További aktív témák...
- Asus Tuf Gaming A16 ÚJ // Ryzen 7 // RTX 5070 // Számla // Garancia //
- Legion Slim 5 16ARP9 15.6" QHD+ IPS Ryzen 7 7435HS RTX 4060 16GB 512GB NVMe gar
- ASUS Zenbook 14 - 14" 2.8K OLED 90Hz - i5-1240P - 16GB - 512GB - Win11 - 1,5 év garancia - MAGYAR
- Gamer PC / i3-12100F / Asus Prime H620M-K / GeForce RTX 3050 8GB / 8GB DDR4 RAM
- SAPPHIRE RX 7800 XT 16GB GDDR6 NITRO+ - Új, 1 év garancia - Eladó!
- Vállalom Xianomi Okos kamerák, szoftveres javíttását
- Apple iPhone 13 / 128GB / Kártyafüggetlen / 12Hó garancia / Akku:100%
- ASUS ROG Z890-E Gaming Wifi lap Intel Core Ultra 7 265KF procival akciós áron garanciával eladó!
- Lenovo X395 Ryzen 5 pro 3500U, 16GB RAM, SSD, jó akku, számla, garancia
- Számítógép - Gamer PC! Csere-Beszámítás! R5 5600G / RTX 4060 / 32GB DDR4 / 1TB SSD
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
