2012-05-07 9 views
8

starałem się zrobić DialogFragment które mogłyby zostać odwołany, gdy podsłuchu, po jakimś poszukiwaniu Postanowiłem iść z tym realizacji:Odrzuć DialogFragment onClick

public class ErrorDialogFragment extends RoboDialogFragment { 

private static final String MESSAGE_ARG = "message"; 
private TextView text; 

public ErrorDialogFragment newInstance (String message){ 
    ErrorDialogFragment f = new ErrorDialogFragment(); 

     Bundle args = new Bundle(); 
     args.putString(MESSAGE_ARG, message); 
     f.setArguments(args); 

     return f; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
    View v = inflater.inflate(R.layout.error_dialog_fragment, container, false); 
    v.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      ErrorDialogFragment.this.dismiss(); 
     } 
    }); 

    text = (TextView) v.findViewById(R.id.error_dialog_text_textView); 
    text.setText(getArguments().getString(MESSAGE_ARG)); 
    return v; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(DialogFragment.STYLE_NO_TITLE, 0); 
} 

Okno alert może mieć niestandardowy komunikat i zostanie zwolniony po dotknięciu.

Czy uważasz, że jest to lepszy sposób na osiągnięcie tego celu?

Dzięki.

Odpowiedz

14

Można użyć okna dialogowego .setCanceledOnTouchOutside (true);, które zamknie okno, jeśli dotkniesz poza oknem dialogowym. lub

Wypróbuj ten samouczek: http://iserveandroid.blogspot.com/2010/11/how-to-dismiss-custom-dialog-based-on.html. Mam nadzieję, że pomoże .. !!

+0

Dzięki @Raghav im przy użyciu teraz setCanceledOnTouchOutside, ale dla wewnętrznego dotknięcia Im będzie kontynuować moje podejście, link odnosi się do aktywność ani DialogFragment :) – Goofyahead

+0

Czy możesz mi powiedzieć, gdzie nazywasz metodę setCanceledOnTouchOutside? ponieważ potrzebuję obiektu dialogowego dla tego – Sandra

+0

po prostu zapisz go tam, gdzie wykonujesz wszystkie inne operacje dla okna dialogowego. – Rookie

2
final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
     alertDialog.setTitle(title); 
     alertDialog.setMessage(msg); 
     alertDialog.setButton("OK", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface dialog, int which) 
      { 
       alertDialog.dismiss(); 
      } 
     }); 
     alertDialog.setIcon(R.drawable.error_icon); 
     alertDialog.show(); 

prostu użyć tego kodu, gdy chcesz pokazać wpis, a jego ok onclick wydarzenie okno dialogowe odrzuci.

+0

Dzięki @ user1208720, ale moja klasa rozciąga się od DialogFragment (celowo nie jest AlertDialog), a jej nie zamknął, gdy przycisk zostanie kliknięty, a po kliknięciu na dowolnym miejscu na widoku . Pytanie dotyczy korzystania z tej klasy DialogFragment z platformy Android i sposobu prawidłowego wysyłania zdarzeń takich jak ta :) – Goofyahead

0

Dzwonię do DialogFragment z działania. Po kliknięciu przycisku w oknie dialogowym używam interfejsu, aby wywołać metodę wewnątrz działania. W tej działalności jestem wykonanie tego:

// This is the code inside the activity that call the dialog 
Fragment fragment = getSupportFragmentManager().findFragmentByTag("MyDialog"); 
if(fragment != null) { 
    DialogFragment dialog = (DialogFragment) fragment; 
    dialog.dismiss(); 
}