2015-01-26 2 views
0

SearchView은 디자인 표준이지만 bug이 있는데 여기에는 OnCloseListener (필터링없이 검색하기 위해 코드를 넣는 곳)이 호출되지 않습니다.
onQueryTextChange 대신 onQueryTextSubmit에서만 검색을 수행하려는 경우 문제가 발생합니다.
전자는 쿼리 문자열이 비어있을 때 호출되지 않으므로 의도적으로 텍스트 필터링을 제거 할 때만 사용자가 텍스트를 지울 때 검색하고 싶지 않습니다.

디자인은 항상 눈에 보이는 검색 창에 대한 호출로 내가 setIconifiedByDefault(true)을 사용하고 - 당신이 SearchView를 '아이콘 화'할 때의 클릭에, 그러나 이것은 사실이 아니다하더라도, onClose() 만이라고합니다 'x'아이콘.

가장 좋은 해결책은 무엇입니까? SearchView 등에서 사용자 정의보기를 추가하지 않는 것이 좋습니다.조회 할 수없는 SearchView를 지울 때 검색을 수행하는 방법은 무엇입니까?

답변

0

해결 방법 : 누를 때 검색을 수행하는 SearchView를 오버레이하는 자신 만의보기를 만듭니다. 검색 문자열이 비어 있지만 마지막으로 수행 된 검색이 비어 있지 않은 문자열을 사용하는 경우에만 표시됩니다 (달리 필요하지 않음).

<RelativeLayout> 
    <SearchView 
     android:id="@+id/search" /> 
    <ImageView 
     android:id="@+id/clear" 
     android:layout_width="@dimen/someValue" 
     android:layout_height="0dip" 
     android:layout_alignTop="@id/search" 
     android:layout_alignBottom="@id/search" 
     android:layout_alignRight="@id/search" 
     android:scaleType="fitCenter" 
     android:visibility="gone" 
     android:src="@drawable/someIcon" /> 
</RelativeLayout> 
// assign to the overlaying ImageView 
class OnClearClickListener implements View.OnClickListener{ 
    @Override 
    public final void onClick(View v) { 
     View clear = findViewById(R.id.clear); 
     clear.setVisibility(View.GONE); // hide, just did its job 
     performSearch(); 
    } 
} 
// assign to SearchView 
class OnFilterQueryTextListener implements OnQueryTextListener { 
    @Override 
    public boolean onQueryTextChange(String newText) { 
     boolean hide = newText != null && newText.length() > 0 || 
      !lastSearchUsedFilter(); // check value stored on successful response 
     findViewById(R.id.clear).setVisibility(hide ? View.GONE : View.VISIBLE); 
     return false; 
    } 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
     findViewById(R.id.clear).setVisibility(View.GONE); 
     performSearch(); 
     return false; 
    } 

}); 
관련 문제