2012-05-07 14 views
8

Stavo cercando di fare un DialogFragment che potrebbe essere respinto se battuto, dopo un po 'di ricerca ho deciso di andare con questa implementazione:Congeda 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); 
} 

la finestra di avviso può avere un messaggio personalizzato e verrà respinto quando toccato.

Pensi che sia un modo migliore per raggiungere questo obiettivo?

Grazie.

risposta

14

È possibile utilizzare dialog.setCanceledOnTouchOutside (true); che chiuderà la finestra di dialogo se si sfiora al di fuori della finestra di dialogo. oppure

Prova questo tutorial http://iserveandroid.blogspot.com/2010/11/how-to-dismiss-custom-dialog-based-on.html. Spero che aiuti .. !!

+0

Grazie a @Raghav sto usando ora il setCanceledOnTouchOutside, ma per il tocco interno sto per continuare con il mio approccio, il link si riferisce ad un attività né un DialogFragment :) – Goofyahead

+0

Puoi dirmi dove si chiama il metodo setCanceledOnTouchOutside? perché ho bisogno di oggetto di dialogo per quello – Sandra

+0

basta scriverlo dove si stanno eseguendo tutte le altre operazioni per la finestra di dialogo. – 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(); 

basta utilizzare questo codice ogni volta che si desidera visualizzare l'avviso e il suo evento ok onclick la finestra di dialogo verrà chiusa.

+0

Grazie @ user1208720, ma la mia classe si estende da DialogFragment (intenzionalmente non un AlertDialog), e la sua non è chiuso quando un tasto è scattato invece quando si fa clic su un punto qualsiasi della vista . La domanda riguarda l'utilizzo di questa classe DialogFragment dal framework Android e come inviare correttamente eventi come questo :) – Goofyahead

0

Sto chiamando un DialogFragment da un'attività. Dopo aver fatto clic su un pulsante nella finestra di dialogo, sto utilizzando un'interfaccia per chiamare un metodo all'interno dell'attività. In che l'attività che sto eseguendo questo:

// 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(); 
} 
Problemi correlati