1

Я создаю очень простой словарь. Функция, которую я пытаюсь реализовать прямо сейчас, - это перейти к функции, которая приводит пользователя к определенному термину слова. Я делаю это, предлагая пользователю фрагмент диалога, который запрашивает у пользователя номер страницы. (Диалог фрагмент будет получить срабатывает через обратного вызова, кнопка печати) Это мой код для этогоПочему DialogFragment.dismiss не удаляет диалоговое окно сразу?

public class GoToDialog extends DialogFragment{ 
submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String pgn = pageNumber.getText().toString(); 
      if(!isNumeric(pgn) || pgn.isEmpty()) { 
       Toast.makeText(getActivity(), "Please enter a valid number", Toast.LENGTH_SHORT).show(); 
      } else { 
       int pagina = Integer.parseInt(pgn); 
       if(pagina <= 0 || pagina > total) { 
        Toast.makeText(getActivity(), String.format("Please enter a valid " + 
         "term number between 0 and %d", total), Toast.LENGTH_SHORT).show(); 
       } else { 
        getDialog().dismiss(); 
        getFragmentManager().executePendingTransactions(); 
        communicator.onDialogMessage(pagina); 
       } 
      } 
     } 
    }); 

Вот скриншоты, когда я запускаю мое приложение

enter image description here

screenshot2 (сразу после экрана 1)

enter image description here

с точки зрения функциональности The диалог загружается отлично и может привести пользователя в нужное место. Однако в этом примере взятия пользователя от термина 7 до термина 5 пользователь переходит к правильному члену , но диалог не закрывается, как следует из getDialog(). Устранение(). Я знаю, что увольнение вызвано, потому что я прошел через код и коммуникатор. InDialogMessage (pagina) возвращает номер правильного термина в действие. Диалог закрывается, когда я выбираю другой номер термина, на который нужно перейти. Кто-нибудь видит проблему? Это не имеет для меня никакого смысла.

Чтобы закрыть диалоговое окно, отклонить это правильный метод использовать - How to correctly dismiss a DialogFragment? Я также попробовал то, что пользователь предложил в Correct way to remove a DialogFragment: dismiss() or transaction.remove()?, что называть executePendingTransactions().

ответ

0

Если у кого-то есть аналогичная проблема, проблема с моим приложением была моей OnTouchListener. Когда я настраивал на OnTouchListener, чтобы вызвать DialogFragment, здесь был мой исходный код для этого GOTO - TextView

private void setUpGoToTouchListener() { 
    goTo.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      FragmentManager fm = MainActivity.this.getFragmentManager(); 
      GoToDialog dialog = new GoToDialog(); 
      Bundle bundle = new Bundle(); 
      bundle.putInt("Size", defMan.getTotalCount()); 
      dialog.setArguments(bundle); 
      dialog.show(fm, "Manager"); 
      return true; 
     } 
    }); 
} 

Когда происходит жест (прикосновение) на TextView, два MotionEvents будет сформирован, нажмите, ACTION_DOWN - первый палец коснулся экрана, а релиз ACTION_UP - последний из пальцев перестает касаться экрана. Поскольку произошло два события движения, были созданы два фрагмента диалога. Вот почему увольнение пришлось дважды вызвать в моей ситуации, чтобы избавиться от обоих фрагментов диалога. Я исправил это с помощью условного теста event.getAction()

Смежные вопросы