使用EditText+ListView并结合TextWatcher实现关键字筛选

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/generallizhong/article/details/78249164

一个简单的listview关键字筛选功能,在网上了一些,其它都是筛选后并没有点击获取其内容,直接上代码:

public class EditTextListView extends Activity {
	//按钮静态缓存,该用法可以避免使用startActivityForResult来获取按钮返回的时间
	public static Button btn;
	private EditText edit_search;
	private ListView lv;
	private EditTextListViewAdapter adapter;
	List<ValueNameDomain> list = new ArrayList<ValueNameDomain>();//所有的数据list
	List<ValueNameDomain> newlist = new ArrayList<ValueNameDomain>();//查询后的数据list

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.edittextlistview);
		init();
		initDefaultLists();

	}

	//初始化控件
	private void init() {
		edit_search = (EditText) findViewById(R.id.edit_search);
		//为输入添加TextWatcher监听文字的变化
		edit_search.addTextChangedListener(new TextWatcher_Enum());
		adapter = new EditTextListViewAdapter(this, list);
		lv = (ListView) findViewById(R.id.edittextListview);
		lv.setAdapter(adapter);
		lv.setOnItemClickListener(new onclick());
	}

	//添加数据
	private void initDefaultLists() {
		ValueNameDomain domain = new ValueNameDomain();
		for (int i = 1; i <= 20; i++) {
			domain = new ValueNameDomain();
			domain.setName("1" + i);
			domain.setValue(i + "");
			list.add(domain);
		}

	}

	//当editetext变化时调用的方法,来判断所输入是否包含在所属数据中
	private List<ValueNameDomain> getNewData(String input_info) {
		//遍历list
		for (int i = 0; i < list.size(); i++) {
			ValueNameDomain domain = list.get(i);
			//如果遍历到的名字包含所输入字符串
			if (domain.getName().contains(input_info)) {
				//将遍历到的元素重新组成一个list
				ValueNameDomain domain2 = new ValueNameDomain();

				domain2.setName(domain.getName());
				domain2.setValue(i + "");
				newlist.add(domain2);
			}
		}
		return newlist;
	}

	//button的点击事件
	class onclick implements OnItemClickListener {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
			TextView text = (TextView) view.findViewById(R.id.tvData);
			String str = (String) text.getText();
			btn.setText(str);
			EditTextListView.this.finish();
		}

	}

	//TextWatcher接口
	class TextWatcher_Enum implements TextWatcher {

		//文字变化前
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {

		}

		//文字变化时
		@Override
		public void onTextChanged(CharSequence s, int start, int before,
				int count) {
			newlist.clear();
			if (edit_search.getText() != null) {
				String input_info = edit_search.getText().toString();
				newlist = getNewData(input_info);
				adapter = new EditTextListViewAdapter(EditTextListView.this,
						newlist);
				lv.setAdapter(adapter);
			}
		}

		//文字变化后
		@Override
		public void afterTextChanged(Editable s) {

		}

	}

需要源码点击这里: 源码


猜你喜欢

转载自blog.csdn.net/generallizhong/article/details/78249164