2012-05-07 2 views
8

Я пытался сделать DialogFragment, которые могут быть отклонены при постукивании, после некоторого поиска я решил пойти с этой реализацией:Отклонить 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); 
} 

диалогового предупреждения может иметь собственное сообщение и будет освобождаемой при постукивании.

Как вы думаете, это лучший способ достичь этого?

Спасибо.

ответ

14

Вы можете использовать dialog.setCanceledOnTouchOutside (true);, который закроет диалоговое окно, если вы коснетесь внешнего диалога. или

Попробуйте этот учебник http://iserveandroid.blogspot.com/2010/11/how-to-dismiss-custom-dialog-based-on.html. Надеюсь, что это поможет .. !!

+0

Спасибо @Raghav im, используя теперь setCanceledOnTouchOutside, но для внутреннего доступа im, который продолжит мой подход, ссылка ссылается на или DialogFragment :) – Goofyahead

+0

Можете ли вы рассказать мне, как вы называете метод setCanceledOnTouchOutside? потому что мне нужен объект диалога для этого – Sandra

+0

, просто напишите его, где вы выполняете все остальные операции для диалога. – 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(); 
+0

Спасибо @ user1208720, но мой класс простирается от DialogFragment (намеренно не является AlertDialog), и его не закрывается при нажатии кнопки, а при нажатии на любом месте в представлении , Вопрос заключается в использовании этого класса DialogFragment из фреймворка android и как правильно рассылать такие события :) – Goofyahead

0

Я вызываю DialogFragment из Activity. После нажатия кнопки в диалоговом окне я использую интерфейс для вызова метода внутри действия. В этой деятельности я выполнение этого:

// 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(); 
} 
Смежные вопросы