2015-02-15 2 views
0

Так что в моем приложении мне нужно использовать несколько диалоговых окон подтверждения. Фрагменты того же типа, в основном, оно имеет сообщение, да/нет и обратный вызов для положительного сообщения. Мне удалось это сделать, за исключением части обратного вызова, и я не могу понять, почему она не называется. Любая помощь будет оценена по достоинству. Спасибо.Обратный вызов фрагмента пользовательского диалогового окна Android не называется

public class MessageDialogFragment2 extends DialogFragment { 


    * Config DialogFrag 
    */ 
    private static String title = ""; 
    private static String message = ""; 
    private static String positiveButtonValue = ""; 
    private static String negativeButtonValue = ""; 

    private static MessageDialogFragment2 myDialog; 

    public static void newInstance() { 
     myDialog = new MessageDialogFragment2(); 
    } 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Dialog dialog = super.onCreateDialog(savedInstanceState); 

     // request a window without the title 
     dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     return dialog; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = getActivity().getLayoutInflater().inflate(R.layout.exit_dialog_fragment, container, false); 
     setCancelable(false); 
     return v; 
    } 

    private static void showDialog(FragmentManager fragmentManager, String dialogId){ 
     myDialog.show(fragmentManager, dialogId); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     ButterKnife.inject(this, view); 
// 
//  setValues(); 
    } 

    @OnClick({R.id.positiveButton, R.id.negativeButton}) 
    public void exit(View view){ 
     switch(view.getId()){ 
      case R.id.positiveButton: 

       break; 

      case R.id.negativeButton: 
       MessageDialogFragment2.this.dismiss(); 
       break; 
     } 
    } 

    public static class MakeDialog{ 
     private Activity activity; 
     private PositiveCallback positiveCallBack; 
     private NegativeCallback negativeCallBack; 

     public MakeDialog(Activity act){ 
      this.activity = act; 
      newInstance(); 
     } 

     public MakeDialog setTitle(String title2){ 
      title = title2; 
      return this; 
     } 

     public MakeDialog setMessage(String message2){ 
      message = message2; 
      return this; 
     } 

     public MakeDialog setPositiveButtonMessage(String message){ 
      positiveButtonValue = message; 
      return this; 
     } 

     public MakeDialog setNegativeButtonMessage(String message){ 
      negativeButtonValue = message; 
      return this; 
     } 

     public void show(){ 
      showDialog(activity.getFragmentManager(), DIALOG_ID); 
     } 

     public MakeDialog setPositiveCallBack(PositiveCallback pcb){ 
      this.positiveCallBack = pcb; 
      return this; 
     } 

     public MakeDialog setNegativeCallBack(NegativeCallback ncb){ 
      this.negativeCallBack = ncb; 
      return this; 
     } 

     public interface PositiveCallback { 
      public void doPositiveCallback(); 
     } 
     public interface NegativeCallback { 
      public void doNegativeCallback(); 
     } 
    } 



} 

Назвать это так:

new MessageDialogFragment2.MakeDialog(this) 
       .setTitle(getResources().getString(R.string.exit_title)) 
       .setMessage(getResources().getString(R.string.exit_message)) 
       .setPositiveButtonMessage(getResources().getString(R.string.yes)) 
       .setNegativeButtonMessage(getResources().getString(R.string.no)) 
       .setPositiveCallBack(new MessageDialogFragment2.MakeDialog.PositiveCallback() { 
        @Override 
        public void doPositiveCallback() { 
         doSomething(); 
        } 
       }) 
       .show(); 

Ожидаемый результат: DoSomething() вызывается,

Фактический результат: DoSomething() не вызывается.

PS: Любая проблема, обнаруженная в коде, не может быть связана с вопросом. Я всегда стараюсь улучшить свои знания и написать лучший код!

+0

pfff не может поверить, насколько я тупик: p я уже знаю ответ. Скоро сделаем правильный ответ. –

ответ

0

Очевидно, что что-то не хватает. Я не вызывал обратный вызов внутри класса DialogFragment!

@OnClick({R.id.positiveButton, R.id.negativeButton}) 
public void exit(View view){ 
    switch(view.getId()){ 
     case R.id.positiveButton: 
      if(positiveCallBack == null) 
       MessageDialogFragment2.this.dismiss(); 
      else 
       positiveCallBack.doPositiveCallback(); 
      break; 

     case R.id.negativeButton: 
      if(negativeCallBack == null) 
       MessageDialogFragment2.this.dismiss(); 
      else 
       negativeCallBack.doNegativeCallback(); 
      break; 
    } 
} 
Смежные вопросы