2016-10-09 7 views
0

私はdialogFragmentがあります。そこには編集テキストがあります。ダイアログのポジティブボタンがクリックされたときに親アクティビティにテキストを渡したいのですが、アクティビティに実装されているインタフェースのメソッドを呼び出すようには見えません。 コード: DialogFragmentフラグメントとアクティビティの間で通信できません

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    String title = getArguments().getString("title"); 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); 
    alertDialogBuilder.setTitle(title); 
    alertDialogBuilder.setView(R.layout.fragment_newfile); 
    alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      listener.onFileTyped(textNewFile.getText().toString()); 
      Log.w("Positive","Button"); //This log is showed 

     } 
    }); 
    alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 

    return alertDialogBuilder.create(); 
} 

MainActivity

@Override 
public void onFileTyped(String fileName) { 
    Log.w("New File", ""); //This log is not showed 
    MainFragment frag = (MainFragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT); 
    File newFile = new File(frag.getCurrentDir().getAbsolutePath(), "fileName"); 



} 

リスナーの割り当て

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    if (activity instanceof onFileTypedListener) { 
     listener = (onFileTypedListener) activity; 
    } else { 
     throw new RuntimeException(activity.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    listener = null; 
} 
+1

はあなたが表示されことができますか? –

+0

投稿を編集しました –

+0

ダイアログポップアップでリスナーが切り離されると言いたい –

答えて

1

私はあなたのコードを試してみました、それは私の場合で動作します。ポジティブボタンをクリックすると、両方のログメッセージが表示されます。あなたと私のコードを比較し、異なるものがあるかどうかを確認:

活動:

public class DialogFragmentActivity extends AppCompatActivity implements MyDialogFragment.onFileTypedListener { 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dialogfragment); 

     MyDialogFragment.newInstance("title").show(getSupportFragmentManager(),"MyDialogFragment"); 
    } 

    @Override 
    public void onFileTyped(String txt) { 
    Log.w("yay", "it works"); 
    } 
} 

フラグメント:あなたは `listener`を割り当てどこ

public class MyDialogFragment extends DialogFragment { 

    onFileTypedListener listener; 

    public interface onFileTypedListener{ 
     public void onFileTyped(String txt); 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     String title = getArguments().getString("title"); 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); 
     alertDialogBuilder.setTitle(title); 
     alertDialogBuilder.setView(R.layout.fragment_newfile); 
     alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       listener.onFileTyped("hello"); 
       Log.w("Positive","Button"); //This log is showed 

      } 
     }); 
     alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 

     return alertDialogBuilder.create(); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     if (activity instanceof onFileTypedListener) { 
      listener = (onFileTypedListener) activity; 
     } else { 
      throw new RuntimeException(activity.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     listener = null; 
    } 

    public static MyDialogFragment newInstance(String title) { 

     Bundle args = new Bundle(); 
     args.putString("title",title); 
     MyDialogFragment fragment = new MyDialogFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 
} 
関連する問題