在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → Android ListView自动检索

Android ListView自动检索

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:1.61M
  • 下载次数:21
  • 浏览次数:351
  • 发布时间:2014-10-31
  • 实例类别:Android平台开发
  • 发 布 人:wangyun7971612
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Android ListView自动检索

实例介绍

【实例简介】
【实例截图】

【核心代码】

package com.tmnw;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnScrollListener,
		OnItemClickListener {

	private static final String TAG = "gjj";
	private EditText edit_search; 
	

	/*----ListView MVC实现----*/
	// model
	List<String> data;//所有的List
	List<String> newList;//输入关键字后新的list
	// view
	ListView lv;
	// controller
	MyAdapter adapter;
	MainAdapter adapter2;
	View header;
	View footer;
	Button scrollInfo;
	Thread currentThread;
	int size = 1;
	AutoCompleteTextView cardNumAuto;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initWidget();
		initData();
		lv.setOnScrollListener(this);
		lv.setOnItemClickListener(this);
		
	}
	// 初始化组件
	private void initWidget() {
		lv = (ListView) findViewById(R.id.list);
		scrollInfo = (Button) findViewById(R.id.scroll_info);
		header = getLayoutInflater().inflate(R.layout.simple_text, null);
		((TextView) header.findViewById(R.id.text1)).setText("这是一个头部");
		footer = getLayoutInflater().inflate(R.layout.simple_text, null);
		((TextView) footer.findViewById(R.id.text1)).setText("加载中...");
		edit_search = (EditText) findViewById(R.id.EditText01);  
		        //为输入添加TextWatcher监听文字的变化  
		edit_search.addTextChangedListener(watcher);
		//myQuery(null,null);
	}

	// 初始化绑定数据
	private void initData() {
		if (lv == null)
			return;
		// 第一步:获取数据源(model)
		data = new ArrayList<String>();
		appendData();

		// 第二步:new一个适配器(controller)
		// 参数1:Context
		// 参数2:listview的item布局
		// 参数3:数据填充在item布局下的那个控件id
		// 参数4:填充的数据
		// adapter = new ArrayAdapter<String>(this, R.layout.simple_text,
		// R.id.text1, data);
		adapter = new MyAdapter();
		// 第三步:给listview设置适配器(view)
		// addHeaderView和addFooterView一定要有一个在setAdapter之前调用
		lv.addHeaderView(header, "header", true);
		lv.setAdapter(adapter);
		// 这里的参数null是数据,false说明是不能被选中的
		// lv.addFooterView(footer, null, false);
		// 设置尾部无分割线,头部不想要分割线同理
		lv.setFooterDividersEnabled(false);
	}
	//当editetext变化时调用的方法,来判断所输入是否包含在所属数据中  
    private List<String> getNewData(String input_info) {  
        //遍历list  
    	newList= new ArrayList<String>();
        for (int i = 0; i < data.size(); i  ) {   
            //如果遍历到的名字包含所输入字符串  
            if (data.get(i).contains(input_info)) {  
                //将遍历到的元素重新组成一个list  
            	// newList= new ArrayList<String>();
            	 newList.add(data.get(i));	
            }  
        }  
        return newList;  
    }  


	// 添加数据
	private void appendData() {
		if (data == null)
			return;
		for (int i = 0; i < 10; i  ) {
			data.add(""   size  );
		}
	}
	 TextWatcher watcher = new TextWatcher() {
		 
		 @Override
		 public void onTextChanged(CharSequence s, int start, int before, int count) {
		         // TODO Auto-generated method stub 
		 Log.d("=================", "onTextChanged is called!");
		 if (edit_search.getText()!=null) {
			 String input_info = edit_search.getText().toString();  
			 newList = getNewData(input_info);
			 Log.i("哈哈",newList.toString());
			 adapter2 = new MainAdapter();
			 lv.addHeaderView(header, "header", true);
			 lv.setAdapter(adapter2);
		}
		
		 }
		 
		 
		 @Override
		 public void beforeTextChanged(CharSequence s, int start, int count,
		 int after) {
		 // TODO Auto-generated method stub
		 Log.d("===============", "beforTextChanged is called");
		 
		 }
		 
		 @Override
		 public void afterTextChanged(Editable s) {
		 // TODO Auto-generated method stub
		 Log.d("=================", "afterTextChanged is called!");
		 }
		 };

	// 模拟加载数据
	class DataLoadThread extends Thread {
		@Override
		public void run() {
			try {
				Thread.sleep(2000);
				appendData();
				// 因为Android控件只能通过主线程(ui线程)更新,所以用此方法
				runOnUiThread(new Runnable() {
					@Override
					public void run() {
						// 加载完毕,移除尾部控件
						lv.removeFooterView(footer);
						// 当数据改变时调用此方法通知view更新
						adapter.notifyDataSetChanged();
					}
				});
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
 class MainAdapter extends BaseAdapter{
	 @Override
		public int getCount() {
			return newList.size();
		}
	 @Override
		public Object getItem(int position) {
			Log.i(TAG, "position:"   position);
			return newList.get(position);
		}
	// itemId
			@Override
			public long getItemId(int position) {
				return position;
			}

			// lv显示几个item就会调用几次此方法,然后返回一个view对象显示
			// position:位置
			// convertView:如果lv不能显示全部的数据,那么滚动后会把从显示到不显示的View传进来复用
			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				View view;
				if (convertView == null) {
					view = getLayoutInflater().inflate(R.layout.simple_text, null);
				} else {
					view = convertView;
				}
				TextView tv = (TextView) view.findViewById(R.id.text1);
				tv.setText(newList.get(position));
				// 隔行变色,可以随心所欲
//				if ((position & 1) == 1) {
//					tv.setBackgroundResource(android.R.color.holo_green_light);
//				} else {
//					tv.setBackgroundResource(android.R.color.holo_red_light);
//				}
				return view;
			}
 }
	// 自定义基础适配器
	class MyAdapter extends BaseAdapter {

		// listview显示的个数,如果有数据源有10条,而返回5,那么lv永远只能显示5条
		// 所以最好就返回数据源的条数就好了
		@Override
		public int getCount() {
			return data.size();
		}

		// 获取item绑定的数据时调用
		@Override
		public Object getItem(int position) {
			Log.i(TAG, "position:"   position);
			return data.get(position);
		}

		// itemId
		@Override
		public long getItemId(int position) {
			return position;
		}

		// lv显示几个item就会调用几次此方法,然后返回一个view对象显示
		// position:位置
		// convertView:如果lv不能显示全部的数据,那么滚动后会把从显示到不显示的View传进来复用
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view;
			if (convertView == null) {
				view = getLayoutInflater().inflate(R.layout.simple_text, null);
			} else {
				view = convertView;
			}
			TextView tv = (TextView) view.findViewById(R.id.text1);
			tv.setText(data.get(position));
			// 隔行变色,可以随心所欲
//			if ((position & 1) == 1) {
//				tv.setBackgroundResource(android.R.color.holo_green_light);
//			} else {
//				tv.setBackgroundResource(android.R.color.holo_red_light);
//			}
			return view;
		}
	}


		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			Toast.makeText(
					this,
					"position:"   position   "  item:"
							  parent.getItemAtPosition(position).toString(),
					Toast.LENGTH_LONG).show();
			
		}

		@Override
		public void onScroll(AbsListView view, int firstVisibleItem,
				int visibleItemCount, int totalItemCount) {
			// firstVisibleItem:第一个显示的item位置
			// visibleItemCount:当前显示的item个数
			// totalItemCount:listview的item总个数
			scrollInfo.setText("first:"   firstVisibleItem   "  visible:"
					  visibleItemCount   "  total:"   totalItemCount);
			
		}

		@Override
		public void onScrollStateChanged(AbsListView view, int scrollState) {
			switch (scrollState) {
			// 手指接触屏幕滑动
			case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
				// 手指离开屏幕做惯性滑动
			case OnScrollListener.SCROLL_STATE_FLING:
				// 当滑动要最后一行时加载数据
				if (view.getLastVisiblePosition() >= view.getCount() - 2) {
					// 可以通过网络加载数据等。
					// 判断是否还是在加载中
					if (currentThread == null || !currentThread.isAlive()) {
						// 添加listview尾部控件加载中
						lv.addFooterView(footer, null, false);
						// 启动线程加载数据
						currentThread = new DataLoadThread();
						currentThread.start();
					}
				}
				break;
			// 不滑动
			case OnScrollListener.SCROLL_STATE_IDLE:
				break;
			}
			
		}
	
		}

实例下载地址

Android ListView自动检索

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警