Anzeigen / Ausblenden von Android Softkeyboard auf Fragment ersetzen

Ich habe eine Aktivität mit einem Fragment. Sagen wir ein Listenfragment mit einer Liste von Dingen. Jetzt möchte ich den Benutzer etwas hinzufügen lassen, also benutze ich den FragmentManager, um das Listenfragment durch ein Insert-Fragment zu ersetzen, das ein EditText hat. Der EditText hat den Fokus und der Cursor blinkt. Aber das Softkey wird nicht geöffnet. Gleiches Ding anders herum: Wenn der Benutzer das neue Ding eingegeben hat und es der Liste hinzugefügt hat, ersetze ich das Insert-Fragment mit einem Listenfragment. Aber obwohl es keinen EditText mehr gibt, schließt die Tastatur nicht.

Was ist der richtige Weg, um dies zu implementieren? Ich kann nicht glauben, dass ich die Tastatur manuell auf allen Übergängen zeigen und verstecken muss ?!

  • Verhindern, dass die Android-Anwendung gestartet wird
  • Rufen Sie C ++ - Bibliothek von Java in Android auf
  • So implementiere ich das Multi-Fenster-Layout (wie der Standard-Browser) (Editor mit mehreren geöffneten Dateien)
  • Wie überprüfe ich, ob eine Bitmap leer ist (leer) auf Android
  • Pre-guess Größe von Bitmap aus der tatsächlichen Uri, vor Skalierung
  • Android: Löschen eines Bildes
  • Wie passieren Sie benutzerdefinierte Komponenten-Parameter in Java und XML
  • Android - Schlechte Benachrichtigung gebucht - Kann RemoteViews nicht erweitern für: StatusBarNotification
  • Wie aktualisiere ich Marker auf Karte in android?
  • RecyclerView und java.lang.IndexOutOfBoundsException: Inkonsistenz erkannt. Ungültige Ansicht Halter Adapter positionViewHolder in Samsung Geräte
  • Näherungsalarm für Standorte, die am Server gespeichert sind
  • Vermeiden Sie TextView, um in das übergeordnete Element zu verpacken
  • 9 Solutions collect form web for “Anzeigen / Ausblenden von Android Softkeyboard auf Fragment ersetzen”

    Ich würde folgendes tun:

    1. Erweitern Sie die Fragment
    2. Override onAttach() und onDetach() Rückrufe
    3. implementieren und verstecken Software-Tastatur-Methode

    Beispielcode:

     class MyFragment extends Fragment { @Override public void onAttach(Activity activity) { super.onAttach(activity); //show keyboard when any fragment of this class has been attached showSoftwareKeyboard(true); } @Override public void onDetach() { super.onDetach(); //hide keyboard when any fragment of this class has been detached showSoftwareKeyboard(false); } protected void showSoftwareKeyboard(boolean showKeyboard){ final Activity activity = getActivity(); final InputMethodManager inputManager = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), showKeyboard ? InputMethodManager.SHOW_FORCED : InputMethodManager.HIDE_NOT_ALWAYS); } } 

    Ich habe das gleiche Problem mit meiner App und endlich haben wir 2 Optionen, erstellen Sie zunächst eine allgemeine Funktion und rufen Sie diese in allen Übergängen an oder erstellen Sie einen globalen Übergang wie dies:

     public static void RemoveAndReplaceFragment(FragmentManager fragmentManager, int FragmentContent, Fragment PlaceHolderFragment,Activity context){ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.remove(fragmentManager.findFragmentById(R.id.frgMainActivity)) .commit(); //Close keyBoard in transition InputMethodManager inputManager = (InputMethodManager) context.getSystemService( Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(context.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.animation_fade_in,R.anim.animation_fade_out); fragmentTransaction.replace(R.id.frgMainActivity, new PlaceholderFragment_MainActivity_AcceptAndFollowTask()).commit(); } } 

    Der beste Weg ist, das Übergangsereignis zu erfassen, aber wir können nicht in diesem Moment … Sag mir, wenn ich dir hilft, viel Glück!

    Um die Tastatur anzuzeigen:

     editText.requestFocus(); InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.showSoftInput(editText, 0); 

    Und dann zu verbergen:

     InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.hideSoftInputFromWindow(editText.getWindowToken(), 0); 

    Das wird sicher funktionieren:

     private void hideKeyboard() { // Check if no view has focus: View view = this.getCurrentFocus(); if (view != null) { InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } private void showKeyboard(){ EditText myEditText = (EditText) findViewById(R.id.myEditText); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); } 

    Ich EditText , dass Ihre ListView den Fokus Ihres EditText , versuchen Sie es und lassen Sie mich wissen, ob es hilft.

     getListView().setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); 

    Ein Weg ist, Activity.recreate anzurufen, da es notwendig ist, den Orientierungsänderungsfall sowieso zu behandeln. Scheint wie Overkill, und Sie auch am Ende mit verschiedenen Übergang Animationen.

    Versuche dies

     InputMethodManager imgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); editText.requestFocus(); 

    Ich bin einverstanden, ich konnte nicht glauben, dass man die Tastatur auch manuell verstecken musste.

    Fügen Sie dies zu Ihrem Fragment onCreate, dass Sie nicht wollen, dass die Tastatur nicht in:

      ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(mToolbar.getWindowToken(), 0); 

    Ändere mToolbar zu einer beliebigen Ansicht innerhalb des Layouts. In diesem Fall habe ich meine Symbolleiste benutzt.

    Füge dies dem Fragment onCreate hinzu, dass die Tastatur angezeigt werden soll.

      ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

    Du kannst unter Code verwenden, um eine weiche Tastatur zu verbergen.

     InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.