Android Как добавить setOnEditorActionListener в список EditTexts - PullRequest
0 голосов
/ 09 октября 2018

у меня есть фрагмент с 5 editTexts, которые я добавляю динамически:

 List<TextView> ArrayQuestionsEditTexts =new ArrayList<TextView>();

 for(int i=0; i<5; i++){
       View to_add = inflater.inflate(R.layout.list_item_add_new_offer,
                        options_layout,false);

                EditText question = (EditText) 
                to_add.findViewById(R.id.editTextQuestion);

                ArrayQuestionsEditTexts.add(question);

                options_layout.addView(to_add);
 } 

Я хочу, чтобы, когда пользователь нажимал следующую кнопку на клавиатуре, чтобы доставить фокус к следующему тексту редактирования в списке ArrayQuestionsEditTexts.

Я пытаюсь это сделать:

             for (int i = 0; i < ArrayQuestionsEditTexts.size()-1; i++) {
                final int nextItem = i+1;
                ArrayQuestionsEditTexts.get(i).setOnEditorActionListener(new TextView.OnEditorActionListener() {

                    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

                        if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_NEXT)) {
                            ArrayQuestionsEditTexts.get(nextItem).requestFocus();

                        }
                        return false;
                    }
                });
           }

, но это решение не сработает.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

в соответствии с официальным документом :

вам необходимо setTag при просмотре (что здесь означает редактирование текста), а затем вам нужно найти это представление с помощью findViewWithTag послечто вам нужно сосредоточиться на редактировании текста через requestFocus

0 голосов
/ 09 октября 2018

Попробуйте:

List<TextView> ArrayQuestionsEditTexts = new ArrayList<TextView>();

for(int i=0; i<5; i++){
    View to_add = inflater.inflate(R.layout.list_item_add_new_offer, options_layout,false);

    EditText question = (EditText) to_add.findViewById(R.id.editTextQuestion);

    question.setOnEditorActionListener(new TextView.OnEditorActionListener() {

        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

            if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_NEXT)) {
                ArrayQuestionsEditTexts.get(nextItem).requestFocus();

            }
            return false;
        }
    });

    ArrayQuestionsEditTexts.add(question);

    options_layout.addView(to_add);
}

Или, другими словами, когда вы делаете первый цикл для раздувания макетов, почему бы не подключить слушателей в этом цикле?Вместо того, чтобы зацикливаться второй раз, чтобы добавить слушателей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...