2016-10-25 8 views
4

Ich habe ein Fragment, wo ich eine Schaltfläche haben, um ein Bild aus einer Galerie auszuwählen. Die Galerie ist erfolgreich geöffnet, aber wenn ich das Bild auswähle, bekomme ich nicht das Ergebnis von Aktivität. Also überlege ich einen Callback (Interface) zu verwenden. Ich weiß jedoch wie.Wie Rückruf von Aktivität zurück zu Fragment über Schnittstelle

Können Sie mir bitte etwas vorschlagen?

Schnittstelle

public interface CallbackListener { 
    void onPhotoTake(String url); 
} 

in Fragment klicken

@OnClick(R.id.addPhoto) void photo() { 
     if (isStoragePermissionGranted()) { 
      Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      context.startActivityForResult(i, RESULT_LOAD_IMAGE); 
     } 
} 

Aktivität

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
} 
  • hier würde Ich mag Schnittstelle
+0

Hallo, könnten Sie einen Code schreiben Sie uns weitere Informationen zu geben über sie umgesetzt wird? – jos

+0

Ich habe meine Frage bearbeitet und Code hinzugefügt – Stepan

Antwort

7

Wenn Sie Daten senden es zurück zu fragmentieren Klasse verwenden möchten zurück zu fragmentieren Ergebnis senden kann eine Reihe von Möglichkeiten, das zu tun:

Erste

  1. erstellen öffentliche Methode in Fragmente Klasse

  2. Anruf, dass das Verfahren des Fragment-Objekt Aktivitätsklasse onActivityResult()


Zweite

  1. eine Schnittstelle in Aktivität erstellen und implementieren diese Schnittstelle in Fragmente verwenden. Dann senden Sie Ihre Daten mit Hilfe der Schnittstelle an das Fragment , z.

Aktivitätsklasse

DataReceivedListener listener; 

public void setDataReceivedListener(DataReceivedListener listener) { 
    this.listener = listener; 
} 

public interface DataReceivedListener { 
    void onReceived(int requestCode, int resultCode, Intent data) 
} 

Fragment Klasse

class fragment extends Fragments implements yourActivityClassName.DataReceivedListener { 
    @Override 
    void onReceived(int requestCode, int resultCode, Intent data) { 

    } 

    onViewCreated(...) { 
     ((yourActivityName) getActivity()).setDataReceivedListener(this); 
    } 
} 

in Acitivity Klasse

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (listener != null) { 
     listener.onActivityResult(requestCode, resultCode, data); 
    } 
} 
Verwandte Themen