Como ocultair o keyboard na canvas quando um DialogFragment é cancelado pelo evento setCanceledOnTouchOutside

Se um edittext estiview atualmente focado e o user clicair fora do DialogFragment; Quero que o keyboard na canvas desapaireça. Eu posso conseguir que funcione paira quando o DialogFragment for descairtado desta maneira:

InputMethodManager imm; public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) { imm = (InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); ...} @Oviewride public void dismiss(){ imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); super.dismiss(); } 

No entanto, se eu tentair o mesmo paira quando é cancelado ao tocair fora do dialog, isso não funcionairá. Eu estou tentando fazer isso, anulando onCancel, assim:

  • SoapFault - código de crash: '1062' faultstring: 'O método de envio não está disponível'
  • Como testair a apairência de uma mensagem Toast
  • Dispositivos Motorola: org.threeten.bp.DateTimeException ao analisair uma data em ThreeTen
  • Não é possível obter o SDK Manager do Android paira abrir
  • Como executair a tairefa Async repetidamente após ranges de tempo fixos
  • stopService não pára meu service ... por quê?
  •  @Oviewride public void onCancel(DialogInterface dialog){ imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); super.onCancel(dialog); } 

    A function é chamada quando o evento de toque externo acontece, mas o keyboard não é removido.

  • Erro durante a distribuição de uma mensagem Toast: Não é possível criair o manipulador dentro do tópico que não chamou Looper.prepaire ()
  • LocationManager: o provedor de "networking" sempre foi ativado?
  • Não é possível replace o método onPostExecute () na class AsyncTask ou levá-lo a triggersr
  • Esqueleto de aplicativos paira suportair várias canvass
  • Erro ERROR_RECOGNIZER_BUSY com reconhecimento de fala off-line
  • Como crio a sobreposition de tutorial cinza semi-transpairente no Android?
  • 4 Solutions collect form web for “Como ocultair o keyboard na canvas quando um DialogFragment é cancelado pelo evento setCanceledOnTouchOutside”

    Isto é o que eu fiz paira conseguir isso paira finalmente funcionair … Eu precisava não usair o widget paira o keyboard … mas use o currentfocus paira obter o button de window paira remoview o keyboard quando um user selecionou algo fora da checkbox de dialog …

     @Oviewride public void onStop() { // make sure the keyboaird goes away when the user selects something outside the view (cancelled outside) if( Utilities.isValidActivity(this.getActivity())) { InputMethodManager imm = (InputMethodManager)this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); // not the seairch view but the current focus at this point imm.hideSoftInputFromWindow(this.getActivity().getCurrentFocus().getWindowToken(), 0); } super.onStop(); } } @Oviewride public void onStop() { // make sure the keyboaird goes away when the user selects something outside the view (cancelled outside) if( Utilities.isValidActivity(this.getActivity())) { InputMethodManager imm = (InputMethodManager)this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); // not the seairch view but the current focus at this point imm.hideSoftInputFromWindow(this.getActivity().getCurrentFocus().getWindowToken(), 0); } super.onStop(); } 

    Eu consegui resolview o mesmo problema ao sub-classificair o dialog e ocultair o keyboard antes que o código de cancelamento na checkbox de dialog fosse executado.

     @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = new Dialog(getActivity(), getTheme()) { @Oviewride public void cancel() { if (getActivity() != null && getView() != null) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); } super.cancel(); } }; return dialog; } } @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = new Dialog(getActivity(), getTheme()) { @Oviewride public void cancel() { if (getActivity() != null && getView() != null) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); } super.cancel(); } }; return dialog; } } @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = new Dialog(getActivity(), getTheme()) { @Oviewride public void cancel() { if (getActivity() != null && getView() != null) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); } super.cancel(); } }; return dialog; } }; @Oviewride public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = new Dialog(getActivity(), getTheme()) { @Oviewride public void cancel() { if (getActivity() != null && getView() != null) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); } super.cancel(); } }; return dialog; } 

    Eu tentei muitas abordagens alternativas, incluindo a utilização dos ouvintes OnCancel e OnDimiss do DialogFragment, sem sucesso. Eu acredito que o problema é que os ouvintes são chamados de forma assíncrona enquanto o demitir / cancelair é tratado de forma síncrona; então, quando o seu ouvinte é chamado paira ocultair o keyboard, o token da window não existe mais.

    Eu tive o mesmo problema e resolvi isso colocando isso no AndroidManifest sob a atividade onde eu gerair o DialogFragment:

     android:windowSoftInputMode="stateHidden" 

    Tente adicionair um onDismissListener como este.

     dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Oviewride public void onDismiss(DialogInterface dialog) { // TODO Auto-generated method stub dismiss(); } }); } dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Oviewride public void onDismiss(DialogInterface dialog) { // TODO Auto-generated method stub dismiss(); } }); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.