最近、Android アプリケーションに苦労しています。私のアプリケーションでは、各セルに EditText を含むアプリ コード内に動的に入力する TableLayout があり、ソフト キーボードの [次へ] ボタンが正しく動作しませんでした (同じ行の他のセルに移動する前に次の行にジャンプします)。 )。そこで、EditText に ID を割り当て、setNextFocusDownId メソッドを使用して次の EditText を指すことで、フォーカスの変更を手動でオーバーライドすることにしました。しかし、これもうまくいきませんでした。
状況を説明します。私のアプリには、次のように 3 つの列を持つ TableLayout があります。
EditText(1) EditText(5) EditText(10)
EditText(50) EditText(100) EditText(160)
EditText(500) EditText(1000) EditText(1600)
EditText(2500) EditText(3000) EditText(3500)
EditText(3800) EditText(4000) EditText(4500)
括弧内の数字は EditText の ID です。この TableLayout にデータを入力する際に、EditText のリストを focusList という名前の ArrayList に保存して、後で NextFocus Id を割り当てることができるようにします。テーブルにデータを入力した後、次のメソッドを呼び出します。
private void manageFocusList() {
for (int i=0; i<focusList.size()-1; i++){
focusList.get(i).setImeOptions(0x05);
focusList.get(i).setNextFocusDownId(focusList.get(i+1).getId());
}
focusList.get(focusList.size()-1).setImeOptions(0x06);
}
EditText のリストは ArrayList で適切にソートされ、EditText 間のリンクは正常に行われます。
これをテストするために、ソフト キーボードの [次へ] ボタンを押したときに、いくつかの印刷トレースを配置しました。これは私が得るものです:
01-07 19:34:32.121: I/System.out(27287): My ID is: 1
01-07 19:34:32.121: I/System.out(27287): NextFocusDown: 5
01-07 19:34:32.521: I/System.out(27287): My ID is: 5
01-07 19:34:32.521: I/System.out(27287): NextFocusDown: 10
01-07 19:36:50.146: I/System.out(27287): My ID is: 10
01-07 19:36:50.146: I/System.out(27287): NextFocusDown: 50
等々...
しかし、アプリケーションでは、次のようにジャンプします。
1->5
5->50
50->100
100->160
160->1600
1600->1000
1000->500
500->2500
そしてこれからもそれを正しく行い続けます
2500->3000
3000->3500
3500->3800
3800->4000
4000->4500
Samsung Galaxy S3 とエミュレーターの両方でテストしましたが、動作はまったく同じです。
あなたが私を助けてくれることを願っています!
お時間をいただきありがとうございます!