2013-01-11 2 views
0

내 활동에 customAdapter가있는 ListView가 있습니다. 해당 ListView의 첫 번째 항목은 EditText입니다. 이 EditText에는 목록이 필터링되도록하는 TextWatcher가 있습니다.ListView의 EditText를 해당 목록의 필터로 사용 : 포커스 문제

search.addTextChangedListener(textWatcher); 
search.setOnFocusChangeListener(focusListener); 

TextWatcher textWatcher = new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if(getContext() instanceof ListActivity) { 
      ListAdapter adapter = ((ListActivity)getContext()).getListAdapter(); 
      if(adapter instanceof TCListObjectAdapter) { 
       requestfocus = true; 
       ((TCListObjectAdapter) adapter).getFilter().filter(s); 
      } 
     } 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 
    @Override 
    public void afterTextChanged(Editable s) { } 
}; 

OnFocusChangeListener focusListener = new OnFocusChangeListener() { 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (!hasFocus && requestfocus){ 
      search.post(new Runnable() { 

       @Override 
       public void run() { 
        search.requestFocus(); 
        requestfocus = false; 
       } 
      }); 
     } 
    } 
}; 

목록 필터링은 예상대로 발생합니다. 그러나 때때로 텍스트가 변경된 후에 listview의 첫 번째 행이 초점을 맞 춥니 다.이 경우 검색 상자의 셀이지만 EditText는 아닙니다. 사용자가 목록을 계속 필터링하려면 먼저 EditText를 다시 선택해야합니다.

비주얼 효과를 위해 listview에서 셀을 포커스하는 옵션을 해제하고 싶지 않습니다.

필터링하는 동안 EditText의 포커스를 잃지 않도록하는 방법은 있습니까?

+0

ListView 내에이 EditText가 있어야합니까? ListView에서 분리 할 수 ​​있었습니까? 아마도 이것이 포커스 유지에 도움이되었을 것입니다. – harism

+0

ListView 내부에있을 필요는 없습니다. 그러나 목록이 스크롤 될 때 화면을 벗어나야합니다. – ePeace

+1

시간을 낭비하게되어서 죄송합니다. listview.addHeaderView (View v)가 이러한 요구를 충족시켜주기 때문에 바쁜 질문이었습니다. – ePeace

답변

0
getListView().addHeaderView(new EditText(this)); 

이렇게하면 이러한 요구 사항이 충족됩니다.