2016-10-25 7 views
4

私は、ギャラリーから画像を選択するボタンがあるフラグメントを持っています。ギャラリーは正常に開いていますが、イメージを選択すると、私は活動の結果を得られません。だから私はコールバック(インターフェイス)を使用することを検討します。しかし、私はどのように知っている。アクティビティからコールバックを取得してフラグメントを使用する方法

私に何かお勧めできますか?

インタフェースフラグメントクリックで

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

@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); 
     } 
} 

活性

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
} 
    あなたがそれを行うにはいくつかの方法があることができ、バックフラグメントクラスにデータを送信したい場合は、ここで
  • 私はインターフェイス
+0

こんにちは、あなたは私たちにそれが実装されている詳細な情報を提供するためにいくつかのコードを投稿できますか? – jos

+0

私の質問を編集し、いくつかのコードを追加しました – Stepan

答えて

7

を使用してフラグメントに戻って結果を送りたい:

まず

  1. フラグメントのクラスに

  2. パブリックメソッドを作成します。
  3. アクティビティクラスのonActivityResult()


セカンド

  1. フラグメントオブジェクトを用いた方法は、活動のインターフェイスを作成し、フラグメントにそのインターフェイスを実装することをコール。次に、インターフェイスの助けを借りて、あなたのデータを断片 に送ってください。

Activityクラス

DataReceivedListener listener; 

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

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

断片クラス

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

    } 

    onViewCreated(...) { 
     ((yourActivityName) getActivity()).setDataReceivedListener(this); 
    } 
} 
Acitivityクラスで

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (listener != null) { 
     listener.onActivityResult(requestCode, resultCode, data); 
    } 
} 
関連する問題