2011-01-17 9 views
5

私はListActivityを持っています。カスタムアイテムはすべてのアイテムに独自のTextEditがあります。 いずれかをタップするとIMEキーボードが上がり、ListViewのサイズが変更されます。 最近、タップでフォーカスを受け取ったEditTextはそれを失います。 2番目のタップは、焦点を合わせるために必要です。 これは、リスト内の1つの項目を移動した場合にのみ発生します。Android:ListView with EditTextsはフォーカスとIMEをぼやけます

IMEを開いてEditTextにフォーカスを当てる方法はありますか?

+2

一般にAndroid UIガイドラインでは、アクティブなコントロールを使用することはお勧めできませんが、すべてのリスト項目でフォーカスと入力を取得できます。だから私はそれを不正行為しようとしている。これまでのところ、特定のEditTextでrequestFocusを明示的にフォーカス設定しても、アダプタがListView.onSizeChangedの後にあるすべてのアイテムを再マッピングするので、アダプタの再マップはフォーカスが失われたソースだと考えられます。 –

答えて

0

リストのサイズを変更しますか? ListView.onSizeChangedをオーバーライドし、super.onSizeChangedに「バブリング」するのではなく消費することができます(エラーソースについてのあなたの前提が正しいと仮定して)?

+0

私はオーバーライドを行いました。リサイズが完了した後にアダプタで再マッピングが行われるため、ListViewが無効になるため、明らかにそうではありません。今、私は、新しい画面をタップして項目を編集する機能を備えたTextViewsのリストを作成しています... –

+0

もちろん、リスト項目をテーピングするときにTextEditを使ってDialogを表示することもできます。ダイアログは、開始されたのと同じアクティビティに属する傾向があり、親アクティビティの上に完全に隠れずに位置します。このようにして、実際のアクティビティを終了していないことを視覚的に示すこともできます。 このリンクは役立つかもしれません:http://groups.google.com/group/android-beginners/browse_thread/thread/efdfb8c7e24fee93?pli=1 – dbm

+0

私はダイアログや編集作業のためにリスト項目のエントリは、おそらくアンドロイドGUIのアプローチのネイティブ公式な方法です。 –

0

タップしたEditTextを変数に格納し、遅れてフォーカスを要求することでこれを解決しました。ハックですが、Androidにハックが必要なことがあります。

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
     EditText editText = getListAdapter().tappedEditText; 
     if (editText != null) { 
      editText.requestFocus(); 
     } 
    } 
}, 100); 
関連する問題