Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Elektromos rásegítésű kerékpárok
- MasterDeeJay: Intel Optane M10: mire lehet használni?
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- laskr99: Processzor és videokártya szilícium mag fotók újratöltve!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Szólánc.
- eBay-es kütyük kis pénzért
- 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
- ThinkPad (NEM IdeaPad)
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Opel topik
- Allegro vélemények - tapasztalatok
- Mazda topik
- Racoon City árnyékában: Teszteltük a Resident Evil Requiemet
- Autós topik
- Futás, futópályák
- sziku69: Fűzzük össze a szavakat :)
- Debrecen és környéke adok-veszek-beszélgetek
- További aktív témák...
- X1 Nano Gen2 13" 2K IPS i7-1260P 16GB 512GB NVMe ujjlolv IR kam gar
- Nagyon szép,megkímélt Asus 15,6",Intel(2,58Ghz)Hibátlan Működésű,nagyon jó akku,NO SSD,NO TÖLTŐ
- Thinkpad X13 Gen4 13.3" FHD+ IPS i7-1365U 16GB 256GB NVMe ujjlolv gar
- SAPPHIRE RX 9070 XT 16GB GDDR6 PULSE GAMING - Új, 2 év gari - Eladó!
- ThinkPad X13 Gen5 13.3" FHD+ IPS Ultra 5 135U 16GB 256GB NVMe magyar vbill ujjolv IR kam gar
- 27% - Samsung S27FG904XU Odyssey 3D IPS Monitor! 3840x2160 / 165Hz / 1ms / FreeSync
- 235 - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4090
- PlayStation 5 FAT DIGITAL + kontroller 6 hó garancia, számlával!
- Dell Inspiron 5490 /i5-10210U/4GB/500GB M.2/MX230/WIN11/Új akku/Billentyűzet problémás/Számlával!
- HP Elitebook 850 G8 15,6" i5 1135 G7, 8-16GB RAM, SSD, jó akku, számla, 6 hó gar
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
