2016-10-09 4 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; 
    } 
} 
관련 문제