2016-10-09 49 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

你能告訴你哪裏分配'listener'? –

+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"); 
    } 
} 

片段:

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