2017-09-06 13 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) 필드를 만들 때마다) 훨씬 더 고통 스러울 것입니다.

한 가지 더 : 다른 필드를 선택하고 구성 변경 사항을 다시 선택하면 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). 그런 다음 아래 필드로 이동합니다.

위와 같은 방법으로 문제가 발생하지 않습니다. 그러나 나는이 모든 가능성이 보이지 않기 때문에 조금 슬퍼합니다. 완료 동작 버튼이 으로 바뀝니다.을 클릭하여 다른 곳으로 이동합니다. 질문에 적어 두었습니다. 그래서 내 "솔루션"이 효과가 있다고 생각합니다.하지만 가장 좋은 대답은 아니므로 다른 아이디어가 있다면 생각을 남겨주세요. :)