2014-05-18 2 views
1

나는 사용자 정의 데이터 내 목록보기를 채우려 그래서 BaseAdapter 확장이 클래스 생성 :안드로이드 : 사용자 정의 목록보기에서 검색

PersonAdapter pe; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      pe=new PersonAdapter(); 
      ListView personListView = (ListView)findViewById(R.id.listView1); 
      personListView.setAdapter(pe);   
      EditText inputSearch=(EditText) findViewById(R.id.inputSearch); 
        txtEditText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 

     } 


} 
: 내 목록보기 이런 식으로 I'populating 다음

public class PersonAdapter extends BaseAdapter{ 

     List<Person> persons= getDataforListViewList(); 
     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return persons.size(); 
     } 

     @Override 
     public Object getItem(int arg0) { 
      // TODO Auto-generated method stub 
      return persons.get(arg0); 
     } 

     @Override 
     public long getItemId(int arg0) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public View getView(int arg0, View arg1, ViewGroup arg2) { 
      if(arg1==null) 
      { 
       LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       arg1 = inflater.inflate(R.layout.listitem, arg2,false); 
      } 

      TextView Name = (TextView)arg1.findViewById(R.id.txtName); 
      TextView PhoneNumber = (TextView)arg1.findViewById(R.id.txtPhone); 

      Person person = persons.get(arg0); 

      Name.setText(person.name); 
      PhoneNumber.setText(person.phoneNumber); 

      return arg1; 
     } 
} 

코드가 올바르게 작동합니다. 이제 목록보기에 검색 기능을 추가하고 싶습니다. 어떻게 할 수 있습니까?

답변

1

당신은 글고 addTextChangedListener를 사용하여 목록보기 내부의 각 데이터를 필터링합니다 필터 클래스를 사용할 수 있습니다 ..

myFilter.addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    dataAdapter.getFilter().filter(s.toString()); 
    } 
    }); 

당신은 필터를 확장하는 클래스를 작성해야합니다.

here

+0

덕분에 좋은 예를하지만,'getFilter()'ArrayAdapter''의 구성원입니다. 내 클래스가이 멤버가없는'BaseAdapter'를 확장하고 있습니다. –

+0

이 포럼에서 getFilter()의 여러 구현을 살펴보면 arraylist를 직접 필터링하는 작업이 줄어 듭니다. 당신의 person 클래스의 한 항목을 검색 문자열과 비교하는 단순한 루프. – greenapps

관련 문제