6

Ho problemi con la tastiera sullo schermo. Ho un'attività con un EditText che mostra la tastiera e un pulsante per passare a una seconda attività. La seconda attività mostra uno ProgressDialog sul suo onCreate(), fa cose e chiude lo ProgressDialog. Il problema è che mentre viene visualizzato ProgressDialog, lo stesso vale per la tastiera.Nascondere la tastiera dopo aver chiamato la nuova attività che mostra una ProgressDialog

Vorrei che la tastiera scomparisse prima di creare lo ProgressDialog. Ho cercato accuratamente sia StackOverflow che altri siti, ma nulla sembra funzionare con questo particolare scenario.

Allego due foto per il vostro riferimento:

http://i45.tinypic.com/2rzq7b6.pnghttp://i45.tinypic.com/34ret1z.png

Questo è il codice della prima attività:

public class FirstActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     findViewById(R.id.button1).setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

e questo è il codice della seconda attività:

public class SecondActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second); 

     // TODO: hide keyboard here 

     final ProgressDialog dialog = ProgressDialog.show(this, "", "Please wait...", true, false, null); 

     // in real code, here there is an AsyncTask doing stuff... 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       dialog.dismiss(); 
      } 
     }, 5000); 
    } 
} 

Grazie

+0

Date un'occhiata a questo: http://stackoverflow.com/a/3858873/1321873 – Rajesh

+0

@Rajesh, già provato , non applicabile qui. La seconda attività deve nascondere la tastiera, anche se la tastiera è stata visualizzata da un'altra attività. – Venator85

risposta

20

risolto utilizzando una variante della tecnica inviato da phalt:

InputMethodManager im = (InputMethodManager) this.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

Questo codice funziona correttamente durante onCreate/onStart/onResume, dal momento che non si basa su una visione concentrata per ottenere il token finestra da.

+2

Questo non funziona per me. Mettilo su onCreate. –

10

Scrivi questo codice nel file manifest.xml per l'attività 'SecondActivity'.

<activity name="EditContactActivity" 
    android:windowSoftInputMode="stateAlwaysHidden"> 
    ... 
</activity> 
+0

Questa non è un'opzione valida per me, poiché il layout della seconda attività potrebbe includere un EditText (determinato dal risultato di AsyncTask). – Venator85

+1

Ho trovato questo utile, quindi la tastiera si apriva quando necessario, ma non automaticamente sul caricamento dello schermo: android: windowSoftInputMode = "stateHidden" –

+0

ha bisogno di stateAlwaysHidden | adjustNothing non solo stateAlwaysHidden – Odaym

1

è possibile utilizzare in questo modo anche:

InputMethodManager imm;

scrittura sotto la linea in onCreate() Metodo:

imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE);

E questa linea è in onclick del tasto:

imm.hideSoftInputFromWindow (arg0.getWindowToken(), 0);

Esempio:

public class FirstActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    findViewById(R.id.button1).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

      imm.hideSoftInputFromWindow(arg0.getWindowToken(), 0); 
      Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
      startActivity(intent); 
     } 
    }); 
} 
} 
+0

Questo normalmente funziona, ma la seconda attività è in un progetto di libreria, mentre la prima attività è in un altro progetto che utilizza questo progetto di libreria. Pertanto, poiché non ho alcun controllo sulla prima attività, la seconda attività deve gestire direttamente il nascondiglio della tastiera. – Venator85

-1

Hai provato:

InputMethodManager im = (InputMethodManager) 
this.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 

im.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 
InputManagerMethod.HIDE_NOT_ALWAYS); 

Questo è il codice butto in in punti che voglio nascondere la tastiera.

+0

Arresta l'applicazione con NullPointerException poiché in onCreate (ovviamente dopo setContentView), onStart e onResume non è ancora presente una visualizzazione focalizzata. – Venator85

+0

Okay, hai invece provato a impostare la tastiera nascosta nel manifest di attività e quindi lasciare che venga visualizzato afterwords tramite il codice? Modifica: per esempio: prendi la risposta di Krishna Suthar sotto e poi inverti il ​​mio codice in modo che la tastiera _can_ venga usata. – phalt

+0

Questo genererà un'eccezione di puntatore nullo perché proverà a ottenere lo stato attivo e non ne otterrà uno. Prova a eseguire script scimmia sul tuo codice. A un certo punto, potrebbe darti un puntatore nullo. –

0

Se Nel Frammento Classe

@Override 
    public void onResume() 
    { 
     getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     super.onResume(); 
     } 

Se In Activity Class

@Override 
    public void onResume() 
    { 
     this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     super.onResume(); 
     FetchLocation fl = new FetchLocation(mContext, locationResult); 
    } 
+1

funziona meglio per me .... – swetha