6

Mam problem z klawiaturą ekranową. Mam działanie z EditText, które pokazuje klawiaturę i przycisk, aby przejść do drugiej czynności. Druga aktywność pokazuje ProgressDialog na jego onCreate(), robi rzeczy i odrzuca ProgressDialog. Problem polega na tym, że podczas wyświetlania ProgressDialog, podobnie jak klawiatura.Ukrywanie klawiatury po wywołaniu nowej czynności, która pokazuje ProgressDialog

Chciałbym, aby klawiatura zniknęła przed utworzeniem ProgressDialog. Przeszukałem dokładnie zarówno StackOverflow, jak i inne strony, ale nic nie wydaje się działać z tym szczególnym scenariuszem.

Ja załączając dwie fotki dla odniesienia:

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

Jest to kod pierwszego działalności:

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); 
      } 
     }); 
    } 
} 

i jest to kod drugiego działalności:

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); 
    } 
} 

Dzięki

+0

Spójrz na to: http://stackoverflow.com/a/3858873/1321873 – Rajesh

+0

@Rajesh, już próbowałem , nie dotyczy tutaj. Druga aktywność musi ukrywać klawiaturę, nawet jeśli klawiaturę pokazała inna aktywność. – Venator85

Odpowiedz

20

rozwiązać, stosując odmianę techniki wysłana przez phalt:

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

Ten kod działa poprawnie podczas onCreate/onStart/onResume, ponieważ nie opiera się na skupioną celu uzyskania tokenu z okna.

+2

To nie działa dla mnie. Umieść go na onCreate. –

10

Wpisz ten kod w pliku manifest.xml dla aktywności "SecondActivity".

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

To nie jest opłacalna opcja dla mnie, ponieważ układ drugiej czynności może zawierać EditText (określony przez wynik AsyncTask). – Venator85

+1

Stwierdziłem, że jest to przydatne, więc klawiatura pojawi się w razie potrzeby, ale nie automatycznie po załadowaniu ekranu: android: windowSoftInputMode = "stateHidden" –

+0

potrzebuje stateAlwaysHidden | adjustNothing nie tylko stateAlwaysHidden – Odaym

1

można użyć tak również:

InputMethodManager IMM;

Zapis poniżej linii w onCreate() Metoda:

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

I ta linia jest w OnClick przycisku:

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

Przykład:

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

Zwykle działa, ale druga czynność znajduje się w projekcie bibliotecznym, a pierwsze działanie jest w innym projekcie wykorzystującym ten projekt biblioteczny. Tak więc, ponieważ nie mam kontroli nad pierwszym działaniem, drugie działanie musi bezpośrednio obsługiwać ukrywanie klawiatury. – Venator85

-1

Czy próbowałeś:

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

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

Jest to kod rzucam w punktach I chcą, aby ukryć klawiaturę.

+0

Powoduje awarię aplikacji z wyjątkiem NullPointerException, ponieważ w onCreate (oczywiście po ustawieniu setContentView), onStart i onResume nie ma jeszcze widoku koncentrującego. – Venator85

+0

Dobra, czy zamiast tego próbowałeś ustawić klawiaturę jako ukrytą w manifeście działań, a następnie pozwolono wyświetlać słowa za pomocą kodu? Edytuj: na przykład: weź odpowiedź Krishny Suthara poniżej, a następnie cofnij mój kod, aby można było użyć klawiatury __. – phalt

+0

Spowoduje to zgłoszenie wyjątku wskaźnika pustego, ponieważ będzie on próbował uzyskać bieżący fokus i nie otrzyma go. Spróbuj uruchomić skrypt małpy na swoim kodzie. W pewnym momencie może dać ci zerowy wskaźnik. –

0

W razie Fragment Klasa

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

Jeśli w klasie Activity

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

to działa najlepiej dla mnie .... – swetha

Powiązane problemy