編輯: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;
}
}
Android ApiDemos示例解析(4) App->Activity->Custom Dialog
App->Activity->Custom Dialog 例子使用Activity 來實現自定義對話框。 類CustomDialogActivity本身無任何
Android開發環境配置完成
最近對Google開發的開源智能手機操作系統Android比較感興趣,因此根據網上的資料下載了Eclipse,Android SDK3.0,並根據提示的步驟進行了環境的配
Android雙向滑動菜單完全解析,教你如何一分鐘實現雙向滑動特效
記得在很早之前,我寫了一篇關於Android滑動菜單的文章,其中有一個朋友在評論中留言,希望我可以 幫他將這個滑動菜單改成雙向滑動的方式。當時也沒想花太多時間,簡單修改了
詳解Cocos2dx 3.0正式版本開發環境搭建(Win32/Android)
cocos2d-x 3.0發布有一段時間了,作為一個初學者,我一直覺得cocos2d-x很坑。每個比較大的版本變動,都會有不一樣的項目創建方式,每次的跨度都挺大&hell