Ich habe ein interessantes Problem, ich versuche zu lösen, die Kommunikation zwischen einem Listenansicht-Adapter und einem Fragment. Ich bin ziemlich neu in der Verwendung von Schnittstellen, also bitte bitte mit mir.Schnittstelle zwischen ListAdapter und Fragment
In meiner Liste Ansicht Adapter, ich brauche eine Änderung des Elternfragment auslösen - insbesondere das int
Mitglied mediaId
:
FragmentTitle extends Fragment implements FragmentManager.OnBackStackChangedListener,
MediaListView.OnMediaTitleSelectedListener {
private int mediaId;
// Other properties, methods, etc
// Required interface method implementation
@Override
public void onMediaTitleSelected(int i) {
mediaId = i;
}
}
Ich habe eine Schnittstelle in der MediaListView Adapterklasse als solche geschrieben:
public interface OnMediaTitleSelectedListener {
void onMediaTitleSelected(int i);
}
im getView()
Methode des Adapters (MediaListView
), gibt es eine onClick Methode aufgerufen:
...
// mediaId instantiated here
final int itemMediaId = foo.getMediaId();
OnMediaTitleSelectedListener callback;
item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// I need to "trigger" the event here
callback.onMediaTitleSelected(itemMediaId);
// Other stuff done here... yadda yadda
}
}
Nun, ich weiß, ich brauche diese Schnittstelle zu instanziieren, damit einen Nullpointer auslösen, und ich versuchte, so in die MediaListView
Klasse zu tun:
OnMediaTitleSelectedListener callback = new OnMediaTitleSelectedListener() {
@Override
public void onMediaTitleSelected(int i) {
Log.i(TAG, "onMediaTitleSelected: "+ i);
}
};
Die oben in der Tat protokolliert das geklickt Ergebnis, aber da diese in der Klasse MediaListView
ist, wird das Ereignis nicht auf FragmentTitle
ausgelöst, obwohl beide nebeneinander im selben Layout sind. Ich verstehe auch nicht, warum das obige notwendig ist, da ich für diese Schnittstellenimplementierung in MediaListView
, nur in FragmentTitle
keine Verwendung habe.
Der Grund für all dies ist das Bundle outState
für Konfigurationsänderungen zu aktualisieren - FragmentTitle
, davon MeidaListView
ein Kind der letzten mediaId
so geklickt aktualisiert werden muss, ist, dass die gleiche Sache nach der Drehung des Bildschirms erscheint.
Gehe ich in die falsche Richtung? Im Augenblick füge ich den Wert zu statischem Mitglied in einer anderen Klasse hinzu, um den Wert von mediaId
zu "halten", aber etwas sagt mir, dass dies nicht der "richtige" Weg ist, dies zu tun.
Danke für jede Hilfe!
Vielen Dank für Ihre Eingabe! – mwieczorek