2016-10-09 4 views
0

Ich habe eine dialogFragment wo gibt es einen Text bearbeiten. Ich möchte den Text an die übergeordnete Aktivität übergeben, wenn die positive Schaltfläche des Dialogfelds geklickt wird, aber es scheint die Methode der Schnittstelle nicht aufzurufen, die in der Aktivität implementiert wird. Code: DialogFragmentKann nicht zwischen Fragment und Aktivität kommunizieren

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



} 

Listener Zuordnung

@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

Können Sie zeigen, wo Sie 'listener' zugewiesen? –

+0

Ich habe meinen Beitrag bearbeitet –

+0

Ich möchte sagen, dass das Dialogfeld Popup den Hörer trennen wird –

Antwort

1

habe ich versucht, den Code und es funktioniert in meinem Fall. Zeigt beide Protokollmeldungen an, wenn auf die positive Schaltfläche geklickt wird. Vergleichen Sie mit Ihnen meinen Code und sehen, ob es etwas anders:

Aktivität:

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

Fragment:

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