2016-12-18 3 views
0

Fragment AFragment Bの2つのフラグメントがあり、どちらのフラグメントも通信用にinterfaces、両方のインタフェースを実装しています。私は両方のFragmentsのサンプルコードを示しているFragment Aフラグメント内の内部クラスとしてのDialogFragment(サポートライブラリフラグメントv4)

public class FragmentA extends Fragment 
{ 
    public interface myInterface 
     { 
     doSomethingFromFragmentA(); 
     } 
    private myInterface listener; 
    @Override OnAttach(Context activity) 
    { 
     listener=(myInterface) activity; 
    } 
} 

ため

サンプルコードFragment B

public class FragmentA extends Fragment 
    { 
     public interface myInterfaceforB 
      { 
      doSomethingFromFragmentB(); 
      } 
     private myInterfaceforB listener; 
     @Override OnAttach(Context activity) 
     { 
      listener=(myInterfaceforB) activity; 
     } 

     private DialogFragment dialog=new DialogFragment() 
     { 
      @Override 
      public Dialog onCreateDialog(Bundle bundle) 
       { 
        //in this dialog creating a AlertDialog and calling doSomethingFromFragmentB() from dialog ok button 
       } 

     } 

のためのサンプルコード、あなたの人々は私がActivityMainでインタフェースを実装していると仮定しなければなりません。

あなたはがの別のタイプのFragmentBにあることに気付きました。第一

DialogFragmentのOKボタンでは、私はActivityMain.FragmentBインターフェイスメソッドを呼び出すようにしようとしていた私は2つの問題を抱えているDialogFragmentが内部FragmentBので、FragmentBは親ではなく、ActivityMainです。この種のInner DialogFragmentからインタフェース実装されたメソッドを呼び出しますか?どのように概念的にホストとの通信でActivity(この場合は親)

第2の:それは私の中には断片的な問題が残っている静的でなければならないというエラーを与えていますが、このDialogFragment内のリスナー変数を使用してリスナー変数を静的にするそれはまだ

フラグメントnullがどのれるコールバックを持っている

答えて

-1

独自のDialogFramentを実装し、実装のコンストラクタを尋ねる適切にインスタンス状態から 再作成するのpublic staticクラスでなければなりませんエラーの下に私を与えますあなたの断片のトリガー。

public class MyDialog extends DialogFragment{ 

MyInterface mi; 

    MyDialog(MyInterface mi){ 
    this.mi = mi; 
    } 

    // on some action mi.yourCallBack(); 
    } 

したがって、ダイアログフラグメントを初期化するときに、インターフェイスにそれを渡すと、アクションのコールバックがフラグメントに送られます。

+0

と私の最初の問題の答え? –

+0

デフォルト以外のコンストラクタをフラグメントで使用することは推奨されません –

関連する問題