2011-02-04 6 views
0

로컬 데이터베이스 (sqlite)와 원격 검색 API의 두 가지 다른 장소에서 수집 한 데이터로 자동 완성하려는 검색 필드가 있습니다. 로컬 옵션을 즉시 보여주고 싶습니다. 잠시 후 (모든 키 누르기마다 API 요청을하지 않도록) API 요청을 시작하십시오.표시되는 AutoCompleteTextArea 드롭 다운에 결과 추가

API 요청이 반환 될 때 문제가 발생합니다. 해당 항목을 AutoCompleteTextArea의 (이미 표시된) 드롭 다운에 어떻게 추가합니까?

private class MyAutoCompleteAdapter extends BaseAdapter implements Filterable { 
    private List<String> resultList; 
    private MySearchFilter filter; 

    public BeerAutoCompleteAdapter() { 
     super(); 
     results = new ArrayList<String>(); 
     filter = new MySearchFilter(); 
    } 

    // getView, getCount, getItem overridden 

    private void add(String newResult) { 
     results.add(newResult); 
     notifyDataSetChanged(); 
    } 

    private class MySearchFilter extends Filter { 
     // performFiltering and publishResults overridden 
    } 
} 

모두 90 %를 작동합니다는 지금, 나는 BaseAdapter를 확장하는 클래스가 있습니다. add(newResult)으로 전화하면 새 결과가 드롭 다운의 하단에 추가됩니다. 죄송 합니다만 높이의은 변경되지 않습니다. API 요청 전에 두 가지 결과가 있고 API에서 돌아 오면 결과는 드롭 다운에서 스크롤바가 표시된다는 것입니다. 내가 스크롤하자마자, UI는 "오, 그래, 그걸위한 공간이있다"라고 결정하고 그것을 보여준다.

notifyDataSetInvalidated()은 물론 내 자동 완성 텍스트 영역에 forceLayout()requestLayout()을 시도했습니다. 주사위가 없다.

+0

오늘 아침에 문제가 발생했다는 생각이 들었습니다. 필터를 사용하여 로컬 데이터를 가져 왔지만 API 호출과 add() 호출이 상위 클래스에서 발생했습니다. 모든 것을 수행하는 방식으로 필터를 재정의 할 수 있습니까? – Plutor

답변

0

나는 그것을 알아 냈다. AutoCompleteTextArea source code을보고 있었는데 높이와 너비를 계산하는 논리가 showDropDown() 인 것으로 나타났습니다. 드롭 다운이 이미 표시되어 있어도이를 수행합니다. 나는 (notifyDataSetChanged() 이외에) 그것을 시도하고 그것은 효과가있다.

1

메뉴 항목은 AutoCompleteTextView와 관련되어 있지만 일부가 아닌 별도의 레이아웃에 표시됩니다. 해당 레이아웃에서 forceLayout() 또는 requestLayout()을 호출하면 일 수도 있고 일 수 있습니다.

AutoCompleteTextView에서 getDropDownHeight을 호출하고 일부만 추가 한 다음 결과로 setDropDownHeight을 호출하여 높이를 변경하도록 할 수도 있습니다.

+0

수동으로 드롭 다운 높이를 설정하는 것이 약간의 klugey처럼 보입니다. 보기를 얻으려면 어떻게해야합니까? AutoCompleteTextView에는 많은 getDropDown *() 함수가 있지만 원하는 것은 아무 것도하지 않는 것 같습니다. – Plutor

관련 문제