- Döbbenetesen sok energia kell az érkező Nova Lake működéséhez?
- Gaming notebook topik
- Fejhallgató erősítő és DAC topik
- Milyen billentyűzetet vegyek?
- Kormányok / autós szimulátorok topikja
- OLED TV topic
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Áramkiegyenlítőt fejlesztett a modern GeForce-okhoz az Aqua Computer
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Projektor topic
Ú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
- iRacing.com - a legélethűbb -online- autós szimulátor bajnokság
- Kávé kezdőknek - amatőr koffeinisták anonim klubja
- Posta, csomagküldés
- Döbbenetesen sok energia kell az érkező Nova Lake működéséhez?
- iPhone topik
- Vivo X300 - kicsiben jobban megéri
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Motoros topic
- Hosszú premier előzetest kapott az Arknights: Endfield
- Futás, futópályák
- További aktív témák...
- iPHONE AKKU - KIJELZŐ CSERE GARANCiÁVAL!
- Silverstone SST-TX700-G TFX táp
- Razer Blade 15 Advanced (2019) Rtx 2080 OLED Touch 4K - újszerű
- Üzletből, garanciával, Új Lenovo ThinkPad X1 Carbon Gen 12 Ultra 7 155u/32GBRAM/1TB SSD/OLED kijelző
- ÚJ BONTATLAN Apple Macbook Air 15,3 M4 10C CPU/10C GPU/16GB/256GB - Égkék - HUN - mc7a4mg/a 3 év gar
- BASEUS Compact Quick Charger 2xUSB USB-C PD 3A 30W fekete
- LG UltraGear Gaming Monitorok : FRISS -30%
- LG 65G5 - 65" OLED Tandem - 4K 165Hz & 0.1ms - MLA Plus - 4000 Nits - NVIDIA G-Sync - FreeSync
- Apple iPhone 16 Pro Max 256GB fekete titán használt, megkímélt 100% akku (140 ciklus)
- REFURBISHED és ÚJ - Lenovo ThinkPad Ultra Docking Station (40AJ)
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest


