Hirdetés
- Fogyókúrával kínálnak több tányért a Toshiba új merevlemezei
- Kicsit visszafogottabban nyávog az Intel Wildcat Lake
- Gyorsabb processzort igen, memóriát alig kapott a Xiaomi új HD tévéokosítója
- Állandó tisztaság a be quiet! Dark Sweeper tápegységgel
- Hivatalosan is elkezd védekezni az Intel csodafegyvere ellen az új Geekbench
- iPad topik
- Vezeték nélküli fejhallgatók
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Mégsem lettek annyira pénztárcabarátok az új Intel CPU-k
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Házimozi belépő szinten
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Gamepad
- OLED TV topic
- Természetfeletti erő? Acer Nitro V 16 AI notebook Gorgon Pointtal
Ú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
- iPad topik
- Eredeti játékok OFF topik
- Vezeték nélküli fejhallgatók
- Kínai és egyéb olcsó órák topikja
- Kerékpárosok, bringások ide!
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Autós topik
- Samsung Galaxy Felhasználók OFF topicja
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Gumi és felni topik
- További aktív témák...
- Lenovo T15 G2 i7-1185G7 16Gb ram, 512Gb NVMe, 15,6", számla, 1 év garancia
- Lenovo ThinkCentre M920q i5-9500T / 16GB RAM DDR4 / 256GB SSD / Windows 11 Pro USFF mini PC Tiny PC
- Dell Latitude 5501,15.6" FHD,i5-9400H,16GB DDR4,512GB NVMe SSD,WIN11,LTE KÁRTYA,ÚJ AKKU
- Lenovo ThinkVision S27i-30 Monitor 27" - új állapot, garancia: 2029.01.16. 1920x1080, 100Hz, IPS
- ThinkPad P53 15.6" FHD IPS i7-9850H T1000 16GB 512GB NVMe magyar vbill ujjolv IR kam gar
- REFURBISHED és ÚJ - DELL Universal Dock UD22 (DisplayLink)
- 27% - ASUS ROG Strix XG27ACS Monitor! 2560x1440 / 1ms / 180Hz / G-Sync / FreeSync
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
- GYÖNYÖRŰ iPhone 14 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3971, 94% Akkumulátor
- GAMER PC! i7-14700 / RTX 5080 / 32GB DDR5 / 1TB NVMe / 1000w Gold / BeszámítOK !
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

