2009-11-18 44 views
4

我將EditText作爲列表樣式AlertDialog(它由默認的ListView實現支持)中的一個元素呈現。我有點期待這種情況不會改變EditText的行爲,但它確實:點擊EditText不會產生軟鍵盤了。任何無痛的方式來觸發對話框中的EditText軟鍵盤?

瞎搞,重點設置了一個小時後,點擊處理我厭倦了和調試到InputMethodManager.showSoftInput(),並發現這一點:

public boolean showSoftInput(View view, int flags, 
     ResultReceiver resultReceiver) { 
     ... 
     if (mServedView != view && (mServedView == null 
       || !mServedView.checkInputConnectionProxy(view))) { 
      return false; 
     } 
     ... 
    } 
} 

這裏的問題是,mServedView是的來頭對話框ListView控件,而view是EditText,並且ListView.checkInputConnectionProxy()在ListView的默認實現中(將被子類重寫)只是簡單地return false

更糟糕的是,我找不到一種方法來設置允許代理IME請求的自定義ListView; AlertDialog.Builder.setView()接受自定義ListView,但這不是InputMethodManager看到的ListView。

任何建議如何解決這個問題?

回答

0

讓我以一個胖胖的身材爲序,我不知道關於ANDROID SDK。

這樣說我會建議: 寫一個requestKeyboard throwable。 讓你的EditText拋出requestKeyboard。 這樣ListView可以處理throwable,生成鍵盤,然後將輸入返回到編輯文本。 這樣mServedView ==查看

我想。

+0

邪惡的想法,但我敢肯定,扔的onfocus /的onClick處理程序內的任何事情都會簡單地終止您的應用程序。 – Matthias 2009-11-19 09:18:19

1

你有沒有嘗試過這樣的事情,道歉,如果你有

getBaseContext().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
+1

坦率地說,我不記得:-)我沒有在這個項目的ATM上工作,但到那時我會再看一次。無論如何,謝謝你的想法! – Matthias 2010-02-02 15:53:07

+2

這種方法不適用於我。 – 2011-03-31 01:41:01