閉じる

ListView内に配置した EditTextの編集

アプリを作っていて、ListView内に配置した EditTextを編集しようとしてもフォーカスを与えた直後にフォーカスが奪われるという事態に遭遇。
ネットで「android listview edittext lost focus」辺りのキーワードでいくらでも事例が出てくる。
その多くは「AndroidManifest.xmlに android:windowSoftInputMode=”adjustPan”を設定しろ」という結論に。
が、手元の環境では効果無い…_no
さらに調べてみると以下のようなシナリオらしい
・EditTextをタッチするとソフトキーボードが出現
・ソフトキーボードの出現によって表示領域が変化
・ListViewのサイズが変わって ListView内のアイテムが再構築
・再構築された EditTextにはフォーカスが当たっていない
・文字入力できず
試行錯誤した結果、Android ExpandableListView の子要素に EditText を入れるといろいろめんどいで示唆されている「requestFocus() することです。」を試してみる。
やることと言ったら、EditTextに OnFocusChangeListenerを設定し、フォーカスを得たときに対象を覚えておき、ListViewから要求されて子 Viewを返すときに覚えていた対象なら requestFocusを呼ぶというかなり泥臭い方法。
一応期待通りに動いてはいるけど、もうちっとマシな方法がないかねぇ?
ちなみに当然のことながらテキスト編集時にフルスクリーンになってしまうような画面サイズ/IMEの組み合わせでは発生しない。

2013/08/14追記

結局、EditTextの代わりに Buttonを配置し、一行編集のダイアログを開くようにしてしまった。

2013/08/26追記

リストの要素が限られているのなら LinearLayoutにまとめて ScrollViewを使うという手もある。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)