Start-Dialog zum Ergebnis-Wert zurückgeben, um als Haupttätigkeit
Habe ich versucht, meinen Kopf um diese für ein paar Stunden jetzt.
Ich habe einen main-Fragment-Klasse, dann aus dem onClick habe ich von einer Bildansicht in dieser Klasse , ich bin gerade dabei ein Dialog-Fragment mit einem einfachen "ja" oder "Abbrechen" option.
Wie würde ich es so machen, dass wenn der Benutzer auf "Ok", wird es dann schicken Ergebnis-code zurück zu meinem main-Fragment sagen, es laufen einige code(In meinem Fall, ich bin Einstellung der Tapete).
Diesen sound einfach, aber kann nicht scheinen, um es herauszufinden. Vielen Dank im Voraus.
Onclick wo ich möchte irgendwie bekommt das Ergebnis zurück an:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.image_detail_fragment,
container, false);
mImageView = (RecyclingImageView) v.findViewById(R.id.imageView);
mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getActivity().getFragmentManager(),
"MyDialogFragment");
}
public void onDialogOKPressed() {
((ImageDetailFragment) (DialogFragment.this.getParentFragment()))
.onDialogOKPressed();
dismiss();
}
});
return v;
}
Dialog-Klasse:
class MyDialogFragment extends DialogFragment {
private Button ButtonOk;
private Button ButtonCancel;
public MyDialogFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.prompt, container);
ButtonOk = (Button) view.findViewById(R.id.button1);
ButtonCancel = (Button) view.findViewById(R.id.button2);
getDialog().setTitle("Set Wallpaper?");
ButtonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
((MyDialogFragment)(DialogFragment.this.getActivity())).onDialogOKPressed();
dismiss();
}
});
ButtonCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
MyDialogFragment.this.dismiss();
}
});
return view;
}
}
InformationsquelleAutor Jack | 2013-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrer Aktivität, fügen Sie eine Methode hinzu, die eine Antwort auf die OK-Taste betätigt wird, wie
public void onDialogOKPressed()
. Dann, in den onClickListener Ihrer Schaltfläche " OK " in das DialogFragment, dies zu tun:oder setzen Sie die neue Methode in deiner main-fragment und tun Sie dies:
Diese ruft einfach die neue Methode in Ihrer Aktivität. So führen Sie Ihren code aus dieser neuen Methode. Es wird nicht aufgerufen, wenn der OK-button ist nicht gedrückt. Loszuwerden, die if/else-block mit den Ergebnis-code. Sieht aus wie Sie planen, legen Sie einen hintergrund aus, so dass in der neuen Methode, legen Sie Ihre Tapete.
Alternativ könnte man die neue Methode in Ihrem fragment und ersetzen
((MyActivity)getActivity())
mit((MyFragment)getParentFragment())
.Ok danke ich werde Sie wissen lassen, wenn das funktioniert 🙂
Was würde ich ersetzen "MyActivty" mit?
InformationsquelleAutor Tenfour04
Ich weiß, das ist eine alte Frage, aber die akzeptierte Antwort scheint zweifelhaft; vor allem die erste Methode. Mit dieser Methode würde einzuführen, die enge Kopplung zwischen
MyDialogFragment
undMyActivity
im wesentlichen Sieg über den Zweck der Verwendung einFragment
. EinFragment
sollte nur wissen, dass es angebracht ist, um eineActivity
nicht, welche Art vonActivity
es ist.Während die zweite Methode ist nicht als schlecht, bedenkt, dass Ihr
Activity
bereits weiß, welche Art vonFragment
es verwenden, ich denke immer noch, es gibt eine bessere Methode mit eineminterface
:Dann können Sie implementieren, die
interface
in jedemActivity
:Dies ist auch die empfohlene Methode für die Kommunikation mit einem
Fragment
auf die Entwickler-training Website.InformationsquelleAutor Bryan
Können Sie versuchen, zu verwenden, Otto (oder EventBus) zum senden von Ereignissen zu MainActivity von dialog über "Events"
Otto: http://square.github.io/otto/
EventBus: https://github.com/greenrobot/EventBus
InformationsquelleAutor Timofey Orischenko