Ho cercato di capire da un paio d'ore.Avvia la finestra di dialogo per il risultato per restituire il valore all'attività principale
Ho una classe Fragment principale, quindi da onClick che ho impostato da un ImageView in quella classe, sto iniziando un frammento di finestra di dialogo con una semplice opzione "Sì" o "Annulla".
Come faccio a fare in modo che quando l'utente fa clic su "Ok", invierà quindi un codice risultato al mio frammento principale dicendogli di eseguire un codice (nel mio caso, sto impostando lo sfondo).
Questo suono è semplice ma non riesco a capirlo. Grazie in anticipo.
Onclick dove vorrei ottenere in qualche modo il risultato di nuovo a:
@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;
}
classe Dialog:
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;
}
}
Quindi come potrei fare per ottenere il risultato in modo che l'attività principale sappia eseguire il mio codice o no? Questa era la mia domanda :) – Jack
Questo semplicemente chiama il tuo nuovo metodo nella tua attività. Quindi esegui il tuo codice da questo nuovo metodo. Non verrà chiamato se il pulsante OK non viene premuto. Sbarazzarsi del blocco if/else con il codice del risultato. Sembra che tu abbia intenzione di impostare uno sfondo, quindi nel nuovo metodo, imposta lo sfondo. – Tenfour04
In alternativa, puoi inserire il nuovo metodo nel tuo frammento e sostituire '((MyActivity) getActivity())' con '((MyFragment) getParentFragment())'. – Tenfour04