public class HandlerDemo extends Activity implements OnScrollListener { private ListView mListView; LinearLayout loadingLayout; private Thread mThread; private ListViewAdapter adapter; private int startIndex = 1;// 从第1条开始 private int size = 10;// 每次下载十条数据 private List<News> newsList; List<Map<String, String>> data ; /* * 设置布局显示属性 */ private LayoutParams mLayoutParams = new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT); private LayoutParams ffLayoutParams = new LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT); private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.news_main); data=new ArrayList<Map<String, String>>(); addView(); } private void addView() { if (startIndex == 1) {newsList = new ArrayList<News>();newsList = getNewsList(); } getdata(newsList); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.HORIZONTAL); progressBar = new ProgressBar(this); layout.addView(progressBar, mLayoutParams); TextView textView = new TextView(this); textView.setText("加载中..."); textView.setGravity(Gravity.CENTER_VERTICAL); layout.addView(textView, ffLayoutParams); layout.setGravity(Gravity.CENTER); loadingLayout = new LinearLayout(this); loadingLayout.addView(layout, mLayoutParams); loadingLayout.setGravity(Gravity.CENTER); // 得到一个ListView用来显示条目 mListView = (ListView) findViewById(R.id.listView); mListView.addFooterView(loadingLayout); adapter = new ListViewAdapter(); mListView.setAdapter(adapter); mListView.setOnScrollListener(this); mListView.setTextFilterEnabled(true); } @Override public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub if (firstVisibleItem + visibleItemCount == totalItemCount) {if (mThread == null || !mThread.isAlive()) {mThread = new Thread() { @Override public void run() { newsList = new ArrayList<News>(); newsList = getNewsList(); getdata(newsList); Message msg = new Message(); msg.what = 1; handler.sendMessage(msg); }};mThread.run();} } }Handler handler = new Handler() { @Override public void handleMessage(Message msg) {// TODO Auto-generated method stubif (msg.what == 1) {startIndex = startIndex + size;Log.v("startindex", startIndex + "");mListView.removeFooterView(loadingLayout);mThread.stop();adapter.count += size;adapter.notifyDataSetChanged();return;} } }; class ListViewAdapter extends BaseAdapter { int count = 10; @Override public int getCount() {// TODO Auto-generated method stubreturn count; } @Override public Object getItem(int position) {// TODO Auto-generated method stubreturn position; } @Override public long getItemId(int position) {// TODO Auto-generated method stubreturn position; }@Override public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubconvertView = LayoutInflater.from(getApplicationContext()).inflate( R.layout.news_item, null);TextView textView = (TextView) convertView .findViewById(R.id.textNewsTitle);textView.setText((data.get(position)).get("title"));return convertView; } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } private List<Map<String, String>> getdata(List<News> list) { if (list == null)return null; for (News news : list) {Map<String, String> map = new HashMap<String, String>();map.put("title", news.getTitle());data.add(map); } return data; } /* * 获取网络数据 注:我是访问本机的一个新闻服务,使用asp.net技术来实现的 * 这个是项目是一个基于android的资讯播报软件 */ private List<News> getNewsList() { String path = "http://10.0.2.2/getNewsList.aspx"; String xmlStr = "<?xml version="1.0" encoding="utf-8"?><source><categoryIds>1,3,7</categoryIds><startIndex>"+ startIndex+ "</startIndex><detail>2</detail><count>"+ size+ "</count></source>"; NewsConnector newsConnector = new NewsConnector(); List<News> list = new ArrayList<News>(); list = newsConnector.getNewsList(path, xmlStr); return list; }}3、小结@Override public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub if(arg1+arg2==arg3) {if(!isloading){new myAsyncTask().execute(null);}else{mListView.removeFooterView(loadingLayout);} } } @Override public void onScrollStateChanged(AbsListView arg0, int arg1) { // TODO Auto-generated method stub}private class myAsyncTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) {// TODO Auto-generated method stubnewsList = new ArrayList<News>();newsList = getNewsList();getdata(newsList);return null; } @Override protected void onPostExecute(Void result) {// TODO Auto-generated method stubsuper.onPostExecute(result);adapter.count+=size;adapter.notifyDataSetChanged();startIndex+=size;isloading=false; } @Override protected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();isloading=true; }}注:以上仅是和使用Handler+线程方法不同的代码,建议下载源码:http://xiazai.jb51.net/201606/yuanma/NewsList(jb51.net).rar,了解详细代码

参考文章:Android listview动态加载列表项实现代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。