2012-04-24 19 views
5

EDYCJA: Wydaje się, że nie wyrażam się jasno. Potrzebuję sposobu, aby ukryć miękką klawiaturę za każdym razem, gdy zastępuję fragment, w którym się znajduję. Jak mam to zrobić?Jak ukryć klawiaturę podczas zmiany kart?

Pozwól, że zachowam to proste. Mam pole EditText w Tab 1.2 fragmentu, który oczywiście otwiera się po naciśnięciu klawisza Soft. Jak mogę to ukryć po zmianie karty? Próbowałem następujących w moim onTabSelected(), która wydaje się nie robić nic

getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

Próbowałem wszystkiego teraz. Żadne z sugerowanych przeze mnie rozwiązań nie pomaga mi w żaden sposób.

+0

dodać androida: windowSoftInputMode = "stateHidden | adjustResize"> w Activtity –

+0

To nic nie robi w mojej aplikacji. – CodePrimate

Odpowiedz

11

programowo można użyć, przechwytując widok aktywnej aktywności na ekranie urządzenia.

public final void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    } 
public final void onTabselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    } 
public final void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    } 

private void hiddenKeyboard(View v) { 
     InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     keyboard.hideSoftInputFromWindow(v.getWindowToken(), 0); 
    } 
+0

Dzięki! To działało dla mnie! –

2

ten sposób można włączyć klawiaturę

inputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

I to jak go zamknąć podczas przełączania kart.

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
+0

Jak uzyskać widok editText, gdy – CodePrimate

0

W pliku XML wystarczy usunąć android:focusable="true" z dowolnego miejsca.

Jeszcze jedno jest, jeśli używasz <requestfocus></requestfocus>, a następnie usuń tę linię.

Wypróbuj. Myślę, że powinno działać.

+0

nie udało mi się poprawnie wyjaśnić. Problem nie polega na tym, że klawiatura jest pokazywana, gdy osoba skupia się na widoku EditText. Po zmianie na inną kartę miękka klawiatura nie ukryje się. – CodePrimate

+0

Myślę, że ustawiłeś android: focusable = "false", to nie pozwoli na otwarcie klawiatury. Myślę, że chcesz wyświetlać klawiaturę tylko wtedy, gdy użytkownik kliknie edittext, więc najlepiej usunąć powyższą linię z każdego miejsca, z którego korzystasz. –

6

Miałem ten sam problem i umieściłem następujący kod w fragmencie karty tuż przed użyciem metody FragmentTransaction.replace() do zmiany kart. Metody onCreate i w każdym fragmencie nie są wyzwalane po początkowym zaznaczeniu tabulatora, więc ukrywanie klawiatury można wykonać przed przejściem do klasy określonego fragmentu. Korzystanie z mTabHost.getApplicationWindowToken(), a nie , było bardzo pomocne. Dzięki temu, kto to znalazł. Przepraszamy, zgubiłem link.

InputMethodManager im = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);    
im.hideSoftInputFromWindow(mTabHost.getApplicationWindowToken(), 0); 

....... 
fm = getFragmentManager(); 
.... 

fm.beginTransaction() 
    .replace(placeholder, new someFragment(), tabId) 
    .commit(); 
2

zestaw OnPageChangeListener do viewpager w główną działalność Jeżeli dodasz fragmenty do viewPager

viewPager.setOnPageChangeListener(myOnPageChangeListener); 




    ViewPager.OnPageChangeListener myOnPageChangeListener = 
      new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageScrollStateChanged(int state) { 
       //Called when the scroll state changes. 

      } 

      @Override 
      public void onPageScrolled(int position, 
             float positionOffset, int positionOffsetPixels) { 
       //This method will be invoked when the current page is scrolled, 
       //either as part of a programmatically initiated smooth scroll 
       //or a user initiated touch scroll. 

       hideKeyboard(); 
      } 

      @Override 
      public void onPageSelected(int position) { 
       //This method will be invoked when a new page becomes selected. 
       //hide keyboard when any fragment of this class has been detached 
       hideKeyboard(); 
      } 
     }; 







public void hideKeyboard() { 
    InputMethodManager inputManager = (InputMethodManager)getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 

    // check if no view has focus: 
    View v = getCurrentFocus(); 
    if (v == null) 
     return; 

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 
Powiązane problemy