2017-09-06 58 views
1

で始まります。プログラムでを作成しました。AutoCompleteTextViewビューで私のレイアウト。ユーザーが有効なデータをフィールドに入力した後、同じパラメータで同じ方法で最初のオブジェクトの直下に新しいAutoCompleteTextViewオブジェクトを作成します。私はArrayListにフィールド参照のすべてを保存しています。この方法では、最後に参照フィールドの最後の要素の下に新しいフィールドがあることを確認しています。 - それはあらゆる分野で進んでいます。Android AutoCompleteTextView - 「再選択」ビューで動的IMEオプションの変更を処理します。

私は、この機能を追加したいと思います。新しいフィールドが作成されたとき、私は新規に作成したフィールドにEditorInfo.IME_ACTION_NEXTnextFocusForward属性に最後のフィールドのIMEオプションを変更 - も、プログラムを。私が達成したいこと:ユーザーがキーボードのEnterキーを押すと、最後のフィールドのフォーカスが新しいフィールドにジャンプします。

ArrayList<AutoCompleteTextView> fields = new ArrayList<>(); 

//Creating freshlyCreatedField, IT'S STILL NOT IN THE fields LIST! 

AutoCompleteTextView currentlySelectedField = fields.get(fields.size() - 1); // last element 

currentlySelectedField.setImeOptions(EditorInfo.IME_ACTION_NEXT); 
currentlySelectedField.setNextFocusForwardId(freshlyCreatedField.getId()); 
currentlySelectedField.setSingleLine(true); //ACTV needs it to get IME to work 

//Adding freshlyCreatedField to the fields list, 
//so next time it will be the currentlySelectedField 

しかし、何が現在選択されてAutoCompleteTextViewオブジェクトに起こりません。このコードを実行した後:私は新しいIMEのオプションを設定するには、このコードを使用しています。フォーカスをクリアして要求しても機能しませんでした。逆の方法で作業するようになりました(毎回+130 "不可視"(技術的にGONE)フィールド)。

もう1つ:他のフィールドを選択して、設定を変更して再選択すると、Enterボタンが最初に動作するように機能します。私はプログラムで同じことをすることができれば、それは私の問題を解決するだろう...どのようにそれを行うにはどのようなアイデア? (もちろん、私はもっと良い解決策も歓迎します...))

答えて

0

私はこの問題をもう一度やり直し始めました。 はい、それが解決策ですが、私はそれがとにかく

...のようになりますようなしが、それはとてもきれいではないですが、私はこのコードを作成しました:

ArrayList<AutoCompleteTextView> fields = new ArrayList<>(); 

//Creating freshlyCreatedField, IT'S STILL NOT IN THE fields LIST! 

//Last element 
AutoCompleteTextView currentlySelectedField = fields.get(fields.size() - 1); 

currentlySelectedField.setOnEditorActionListener(
     new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     boolean handled = false; 
     if (actionId == EditorInfo.IME_ACTION_NEXT 
       || actionId == EditorInfo.IME_ACTION_DONE 
       || event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { 
      freshlyCreatedField.requestFocus(); 
      handled = true; 
     } 

     return handled; 
    } 
}); 

//Adding freshlyCreatedField to the fields list, 
//so next time it will be the currentlySelectedField 

私はキーボードがIME_ACTION_NEXT(すでに設定されている場合)とIME_ACTION_DONEアクションID(デフォルト)のいずれかを聴いているフィールドに実際に編集中のフィールドにEditorActionListenerを入れます。キーを入力します誰かが物理的なキーボードを使用したい場合はase)。それから、下のフィールドにジャンプします。

この方法では問題はありません。しかし、私は少し悲しいです。これらの可能性はすべて見えないからです。 完了アクションボタンがに切り替わります。次のに移動するだけで、他の場所に移動することができます。だから、私の "解決策"はうまくいくと思いますが、それは最善の答えではありませんので、あなたの考えを書き留めてください。:)

関連する問題