2012-04-24 3 views
5

EDIT: Sembra che non mi stia chiarendo. Quello di cui ho bisogno è un modo per nascondere la tastiera virtuale ogni volta che sostituisco il frammento in cui mi trovo. Come faccio a fare questo?Come nascondere la tastiera virtuale quando si cambiano le schede?

Lasciatemi tenere questo semplice. Ho una casella EditText in Tab Fragment 1.2 che ovviamente si apre sulla tastiera Soft quando viene premuto. Come posso nascondere questo quando la scheda viene cambiata? Ho provato quanto segue nel mio onTabSelected() che non sembra di fare nulla

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

Ho provato di tutto ora. Nessuna delle soluzioni suggerite che ho individuato finora mi sta aiutando in alcun modo.

+0

aggiungere Android: windowSoftInputMode = "stateHidden | adjustResize"> nella tua Activtity –

+0

Questo non fa nulla nella mia applicazione. – CodePrimate

risposta

11

a livello di codice, è possibile utilizzare, catturando la visualizzazione dell'attività attiva sullo schermo del dispositivo.

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

Grazie! Questo ha funzionato per me! –

2

in questo modo si attiva la tastiera virtuale

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

e questo è come lo si chiude quando si passa le schede.

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

Come ottengo la vista editText quando – CodePrimate

0

Nel file XML è sufficiente rimuovere android:focusable="true" da qualsiasi posizione.

Un'altra cosa è se si utilizza <requestfocus></requestfocus> quindi rimuovere anche questa riga.

Provalo Penso che dovrebbe funzionare.

+0

Non sono riuscito a spiegarmi correttamente. Il problema non è la tastiera visualizzata quando una persona mette a fuoco la vista EditText. È che la tastiera virtuale non si nasconde quando passo a una scheda diversa. – CodePrimate

+0

Penso che tu abbia impostato android: focusable = "false" questo non permetterà affatto di aprire la tastiera. Penso che tu voglia visualizzare la tastiera solo quando l'utente fa clic su edittext, quindi il modo migliore per rimuovere la riga sopra da ogni dove stai usando. –

6

Ho riscontrato lo stesso problema e ho inserito il seguente codice nel frammento della scheda subito prima di utilizzare il metodo FragmentTransaction.replace() per modificare le schede. I metodi onCreate e onCreateView in ciascun frammento non vengono attivati ​​dopo la selezione della scheda iniziale, quindi è possibile nascondere la tastiera prima di passare alla classe del frammento specifico. L'utilizzo di mTabHost.getApplicationWindowToken() anziché di editText.getWindowToken() è stato di grande aiuto. Grazie a chiunque l'abbia trovato. Mi dispiace, ho perso il 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

set OnPageChangeListener a viewpager in mainActivity Dove si aggiungono frammenti di 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); 
}