- Apple iPhone 16 Pro - rutinvizsga
- Mobil flották
- Hatodik bétánál jár a Galaxy S25
- Xiaomi 14 - párátlanul jó lehetne
- Motorola Edge 60 Fusion - nem csak a forma időtálló
- Samsung Galaxy Z Fold5 - toldozás-foldozás
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- Honor Magic7 Pro - kifinomult, költséges képalkotás
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
Ú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
- Apple iPhone 16 Pro - rutinvizsga
- Formula-1
- Kínai és egyéb olcsó órák topikja
- PlayStation 5
- Plazma TV topic
- Tesla topik
- Xbox Series X|S
- Dögrováson lévő Samsung telefonból még mindig csinálhatunk DeX-es minigépet
- Samsung Galaxy Felhasználók OFF topicja
- Mégis van lekvár a Donut Lab szilárdtest fánkjában?
- További aktív témák...
- i3-8100 és i3-8100T - stabil, gyors, megbízható - ideális otthonra vagy irodába
- Lenovo LOQ 15IRX10 i5-13450HX RTX5060 32GB 1000GB Teljeskörű garancia
- Lenovo LOQ 17IRX10 i5-13450HX RTX5050 24GB 1000GB Teljeskörű garancia
- Dell Inspiron 5502 notebook
- Samsung Galaxy S23 Ultra 8/256GB - Kártyafüggetlen, Fekete - 1 Év Garanciával
- GYÖNYÖRŰ iPhone 13 Pro 256GB Graphite -1 ÉV GARANCIA - Kártyafüggetlen, MS4409
- Azonnali készpénzes Intel i3 i5 i7 i9 12/13/14 gen processzor felvásárlás személyesen / csomagküldés
- Fujitsu LifeBook 7U14A2 netbook / 12 hónap jótállás
- 244 - Lenovo LOQ (15IRX9) - Intel Core i7-13650HX, RTX 4060
- BESZÁMÍTÁS! Asus Rog Maximus IX Hero Z270 chipset alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

