Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android實現ListView過濾功能,繼承於BaseAdapter,非ArrayAdapter

Android實現ListView過濾功能,繼承於BaseAdapter,非ArrayAdapter

編輯:Android開發教程

其實實現ListView過濾功能最方便的便是使用ArrayAdapter,裡面自帶的 getFilter()方法能很方便的實現此功能,但是在實際的開發中,一般都是繼承於 BaseAdapter。還有一種是利用控件AutoComplete,這種方式只是在輸入框的下方 重新顯示一個列表,顯然,很多時候這兩種方式也滿足不了我們的要求。

在Activity中定義一個類,讓它實現TextWatcher接口,然後再onTextChanged 方法中去過濾。然後常見相應的Pattern和match,來判斷傳入的參數時候符合列表 中的數據,符合就加入一個新的列表中。

首先貼出實現的效果圖

下面貼出主要實現代碼

package com.example.demo;
    
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.widget.EditText;
import android.widget.ListView;
    
public class MainActivity extends Activity {
        
    List<People> people = new ArrayList<People>() ;
    EditText editinput;
    ListView listview;
    Adapter adapter;
        
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editinput = (EditText)findViewById(R.id.edit);
        listview = (ListView)findViewById(R.id.ydlist);
        initdata();
        adapter = new Adapter(getApplicationContext(), people);
        listview.setAdapter(adapter);
        editinput.addTextChangedListener(new watcher());
    }
        
     void initdata(){
            
        people.add(new People("張三","1374456"));
        people.add(new People("張三小子", "12444455"));
        people.add(new People("李一", "1345555"));
        people.add(new People("王一", "1355555"));
        people.add(new People("王二", "1365555"));
        people.add(new People("李三", "13565555"));
        people.add(new People("李一", "123555"));
     }
        
    class watcher implements TextWatcher{
    
        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
                
        }
    
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub    
                
        }
    
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            String aa = s.toString();
            Pattern p = Pattern.compile(aa);
            List<People> we = new ArrayList<People>();      

  
            for(int i=0;i<people.size();i++){
                People pp = people.get(i);
            Matcher matcher = p.matcher(pp.getName()+pp.getPhome());
            if(matcher.find()){
                we.add(pp);
            }
            }
            adapter = new Adapter(getApplicationContext(), we);
            listview.setAdapter(adapter);
        }
            
    }
        
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved