Boîte de Dialogue de démarrage pour le résultat à la valeur de retour à l'activité principale
J'ai essayé d'obtenir ma tête autour de cela pour un couple de heures maintenant.
J'ai un principal Fragment de la classe, puis de la onClick j'ai mis en place à partir d'une ImageView dans cette classe , je suis en train de créer une boîte de Dialogue Fragment avec un simple "Oui" ou "Annuler".
Comment pourrais-je faire pour que lorsque l'utilisateur clique sur "Ok", il sera ensuite envoyer un code de Résultat de revenir à mon principal Fragment en lui disant d'exécuter du code(Dans mon cas, je suis paramètre de papier peint).
Cette paraître simple, mais ne semblent pas le comprendre. Merci à l'avance.
Onclick où je voudrais obtenir en quelque sorte le résultat de:
@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 de boîte de dialogue:
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;
}
}
OriginalL'auteur Jack | 2013-10-10
Vous devez vous connecter pour publier un commentaire.
Dans votre activité, ajouter une méthode qui répond le bouton OK enfoncé, comme
public void onDialogOKPressed()
. Puis, dans la onClickListener de votre bouton OK dans la DialogFragment, faites ceci:ou de placer la nouvelle méthode dans votre principal fragment et de le faire:
Cela appelle simplement votre nouvelle méthode dans votre activité. Si l'exécution de votre code à partir de cette nouvelle méthode. Il ne sera pas appelé si le bouton OK n'est pas pressé. Se débarrasser de la si/d'autre bloc avec le code de résultat. On dirait que vous avez l'intention de configurer un fond d'écran, de sorte que la nouvelle méthode, réglez votre fond d'écran.
Alternativement, vous pouvez mettre la nouvelle méthode dans votre fragment et de le remplacer
((MyActivity)getActivity())
avec((MyFragment)getParentFragment())
.Ok merci, je vais vous laisser savoir si cela fonctionne 🙂
Que serais-je remplacer "MyActivty"?
OriginalL'auteur Tenfour04
Je sais que c'est une vieille question, mais l'on a accepté la réponse semble douteuse; en particulier, la première méthode. En utilisant cette méthode permettrait d'introduire un couplage étroit entre
MyDialogFragment
etMyActivity
, essentiellement en battant le but de l'utilisation d'unFragment
. UnFragment
ne doit savoir qu'il est attaché à unActivity
, pas ce genre deActivity
il est.Tandis que la seconde méthode n'est pas comme mal, compte tenu de votre
Activity
sait déjà ce genre deFragment
à utiliser, je pense toujours qu'il y est une meilleure méthode à l'aide d'uninterface
:Ensuite, vous pouvez mettre en œuvre la
interface
dans touteActivity
:C'est aussi la méthode recommandée pour la communication avec un
Fragment
sur le développeur de site de formation.OriginalL'auteur Bryan
Vous pouvez essayer d'utiliser Otto (ou EventBus) pour l'envoi d'événements à MainActivity la boîte de dialogue par le biais des "Événements"
Otto: http://square.github.io/otto/
EventBus: https://github.com/greenrobot/EventBus
OriginalL'auteur Timofey Orischenko