0

Klavyeyi runOnUiThread() içinde gizlemek için bir çağrı yaparken (bir parçanın içinden), klavye gizler, ancak ben de aynı aktiviteyi yaptıktan sonra activity.getCurrentFocus(). post(), klavye gizlenmez. Kodun altındaSoftkeyboard gizle çağrısı, view.post() içinde beklendiği gibi çalışmaz, ancak runOnUIThread() içinde düzgün çalışıyor()

1)

activity.runOnUiThread(new Runnable() 
        { 
         @Override 
         public void run() 
         { 
          InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
          imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
         } 
      }); 

2 çalışır) ancak bu view = activity.getCurrentFocus();

android belgeler şöyle diyor

activity.getCurrentFocus().post(new Runnable() 
        { 
         @Override 
         public void run() 
         { 
          InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
          imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
         } 
      }); 

yapmaz: -

a) Kamuya final void runOnUIThread (Runnable eylem) - Belirtilen eylemi çalıştırır UI parçasındaki iyon. Geçerli iş parçacığı UI iş parçacığı ise, eylem hemen gerçekleştirilir. Geçerli iş parçacığı UI iş parçacığı değilse, eylem UI iş parçacığı olay sırasına gönderilir. B) public boolean post (Çalışabilir eylem) - Runnable'ın mesaj sırasına eklenmesine neden olur. Runnable kullanıcı arayüzü iş parçacığı üzerinde çalıştırılacak.

Birisi lütfen açıklayabilir, şimdiden teşekkürler!

cevap

0

Sanırım, activity.getCurrentFocus().post() yaptıkça, görünüm bittikten, yeniden boyutlandırıldıktan ve güncelleştirildikten sonra yürütülür. Yani eğer görüşünüzün idam edilmeyecek şekilde güncellenmesi gerekmiyorsa. İdam edilip edilmediğini görmek için günlük/kırılma noktaları eklemeyi denediniz mi? Eğer yürütülürse, klavye tekrar açılabilir.

+0

Merhaba @beef, cevabınız için teşekkürler, kod çalıştırılıyor, klavye basitçe gizlenmiyor. Klavyenin çağrısının gizlenmesinden önce klavyenin üstüne bazı kelime önerileri içeren "biten" bir tuşa sahip olmasına rağmen, getCurrentFocus(). Post() işlevini kullanarak klavye çağrısını gizledikten sonra yapılan bazı düğmeler var demektir. Enter tuşu ve artık klavyenin üstünde kelime önerisi yok, ancak klavye gizlenmiyor. Tüm söylenen ve yapılan runOnUiThread kullandığınızda, klavye her zaman gizler. – Ajit

+0

@Ajit Bu ilginç. Düğme düğmesine basılması gerçeği, klavyenin görünmesini ancak metin alanıyla ilgili doğru bilgileri almamasını ister. Ne tür metin alanı olduğu gibi. Şimdi soru klavyenin tekrar görünmesini istemek ... Belki de ne aradığını görmek için Traceview kullanın – beef

İlgili konular