- 浏览: 150365 次
- 性别:
- 来自: 茂名
文章分类
最新评论
-
stoneyulu:
很好,正需要要!用来在thread和activity之间传数 ...
在Activity中通过Bundle传递自定义数据类型 -
鱼在陆地上跑:
只能读取TXT格式的文件,而不能读取图片
读取Rescource和asset文件夹中的文件 -
myg_315:
我也在调查这个问题,谢谢!
Android程序的退出终于完美解决,兼容所有SDK -
jk138:
谢谢各位的评论,楼下的建议很好,值得大家注意了.
Android程序的退出终于完美解决,兼容所有SDK -
cyilinycc:
非常感谢你提供的这个方法,但我经过测试之后,发现这个方法存在弊 ...
Android程序的退出终于完美解决,兼容所有SDK
有两种方法:
我在项目中用了两种方法,来进行listView的分页,分别是用Handler和AsyncTask。
第一种方法:用Handler和线程
看代码:
package com.cnjmwl.scm.salesorder; import java.util.ArrayList; import com.cnjmwl.scm.MainActivity; import com.cnjmwl.scm.R; import com.cnjmwl.util.HttpUtil; import com.cnjmwl.util.ReadXML; import com.cnjmwl.util.StringUtil; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.Toast; import android.widget.TextView; import android.widget.AbsListView.OnScrollListener; import android.widget.LinearLayout.LayoutParams; import com.cnjmwl.scm.entity.*; public class SalesOrderActivity extends Activity implements OnScrollListener{ private ListView mListView; private MyAdapter mMyAdapter; LinearLayout loadingLayout; private Thread mThread; /** * 设置布局显示属性 */ private LayoutParams mLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); /** * 设置布局显示目标最大化属性 */ private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); private ProgressBar progressBar; /** * 报检属性名称 */ String[] strID,strUnit,strStatus,strStatusDesc,strNO,strDate,strLinkMan,strLinkTel,business; int maxCount;//数据库中的订单总数 ArrayList<SalesOrder> lists; View.OnClickListener cl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.order_main); setupViews(); } public void setupViews(){ if(maxCount==0){ addDeclaration(); } //线性布局 LinearLayout layout=new LinearLayout(this); //设置布局水平方向 layout.setOrientation(LinearLayout.HORIZONTAL); //进度条 progressBar=new ProgressBar(this); //把进度条加入到layout中 layout.addView(progressBar,mLayoutParams); //文本内容 TextView textView=new TextView(this); textView.setText("加载中..."); textView.setGravity(Gravity.CENTER_VERTICAL); //把文本加入到layout中 layout.addView(textView,FFlayoutParams); //设置layout的重力方向,即对齐方式是 layout.setGravity(Gravity.CENTER); //设置ListView的页脚layout loadingLayout = new LinearLayout(this); loadingLayout.addView(layout,mLayoutParams); loadingLayout.setGravity(Gravity.CENTER); //得到一个ListView用来显示条目 mListView=(ListView)findViewById(R.id.listview); //添加到页脚 mListView.addFooterView(loadingLayout); mMyAdapter=new MyAdapter(); mListView.setAdapter(mMyAdapter); mListView.setOnScrollListener(this); mListView.setTextFilterEnabled(true); mListView.setBackgroundResource(R.drawable.background); } /** * 向服务器请求待办列表 */ private String queryList(String uri){ String url = HttpUtil.BASE_URL+uri; System.out.println(url); return HttpUtil.getHTTPUtil().queryStringForPost(url); } public void addDeclaration(){ String result2=queryList("orderStatusList".trim()); lists=ReadXML.readXML(result2).getInspection2(); Log.v("result2--", result2); strID=new String[lists.size()]; strNO=new String[lists.size()]; strStatus=new String[lists.size()]; strStatusDesc=new String[lists.size()]; strUnit=new String[lists.size()]; strDate=new String[lists.size()]; strLinkMan=new String[lists.size()]; strLinkTel=new String[lists.size()]; business=new String[lists.size()]; int i2=0; for(SalesOrder in:lists){ strID[i2]=in.getId(); strStatus[i2]=in.getStatus(); strDate[i2]=in.getDate(); strLinkTel[i2]=in.getLinkTel(); //business[i2]=business[i2].replace("@", "\n"); if(in.getStatusDesc()!=null&&!in.getStatusDesc().equals("")){ strStatusDesc[i2]=StringUtil.unicodeToUtf8(in.getStatusDesc()); }else { strStatusDesc[i2]=""; } if(in.getUnit()!=null&&!in.getUnit().equals("")){ strUnit[i2]=StringUtil.unicodeToUtf8(in.getUnit()); }else { strUnit[i2]=""; } if(in.getLinkMan()!=null&&!in.getLinkMan().equals("")){ strLinkMan[i2]=StringUtil.unicodeToUtf8(in.getLinkMan()); }else { strLinkMan[i2]=""; } if(in.getBusinessItems()!=null&& !in.getBusinessItems().equals("")){ business[i2]=StringUtil.unicodeToUtf8(in.getBusinessItems()); business[i2]=business[i2].replace("||", "\n"); }else { business[i2]=""; } //business[i2]=business[i2].replace("|", "\n"); Log.v("business", business[i2]); strNO[i2]=in.getNo(); i2++; } maxCount=strID.length; } /** * 创建菜单 * */ @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, Menu.FIRST+1, 5, "返回首页").setIcon(android.R.drawable.ic_menu_delete); menu.add(Menu.NONE, Menu.FIRST+2, 2, "退出").setIcon(android.R.drawable.ic_menu_edit); // this.getMenuInflater().inflate(R.menu.options_menu, menu); return true; } //菜单项被选择事件 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu.FIRST + 1: Intent intent=new Intent(Copy_4_of_SalesOrderActivity.this,MainActivity.class); startActivity(intent); break; case Menu.FIRST + 2: Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); System.exit(0); break; } return false; } //定义自己的适配器,注意getCount和getView方法 private class MyAdapter extends BaseAdapter{ int count = 10 ; @Override public int getCount() { return count; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_data, null); TextView noTextView=(TextView)convertView.findViewById(R.id.ItemNO); noTextView.setText(strNO[position]); TextView LinkManTextView=(TextView)convertView.findViewById(R.id.ItemLinkMan); LinkManTextView.setText(strLinkMan[position]); TextView LinkTelTextView=(TextView)convertView.findViewById(R.id.ItemLinkTel); LinkTelTextView.setText(strLinkTel[position]); TextView busTextView=(TextView)convertView.findViewById(R.id.Itembusiness1); busTextView.setText(business[position]); return convertView; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(firstVisibleItem + visibleItemCount == totalItemCount){ //开远程去下载网络数据 if(mThread == null || ! mThread.isAlive()){ mThread = new Thread(){ @Override public void run() { try { //这里写网络数据请求的方法 if(maxCount==0){ addDeclaration(); } } catch (Exception e) { e.printStackTrace(); } Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; mThread.run(); }else { mThread.destroy(); } } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: Log.v("mMyAdapter.count", mMyAdapter.count+""); if(mMyAdapter.count < maxCount){ if((maxCount - mMyAdapter.count) >10){ mMyAdapter.count+=10; }else { mMyAdapter.count+= maxCount -mMyAdapter.count; } int currentPage = mMyAdapter.count / 10; //Toast.makeText(getApplicationContext(), "第"+currentPage +"页",Toast.LENGTH_LONG).show(); }else { mListView.removeFooterView(loadingLayout); mThread.stop(); } //重新刷新ListView的adapter里面数据 mMyAdapter.notifyDataSetChanged(); break; default: break; } } }; }
第二种:AsyncTask
package com.cnjmwl.scm.salesorder; /** * 使用AsyncTask进行分页 */ import java.util.ArrayList; import com.cnjmwl.scm.MainActivity; import com.cnjmwl.scm.R; import com.cnjmwl.util.HttpUtil; import com.cnjmwl.util.ReadXML; import com.cnjmwl.util.StringUtil; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.Toast; import android.widget.TextView; import android.widget.AbsListView.OnScrollListener; import android.widget.LinearLayout.LayoutParams; import com.cnjmwl.scm.entity.*; public class SalesOrderActivity extends Activity implements OnScrollListener{ private ListView mListView; private MyAdapter mMyAdapter; LinearLayout loadingLayout; private int lastItem=0; /** * 设置布局显示属性 */ private LayoutParams mLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); /** * 设置布局显示目标最大化属性 */ private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); private ProgressBar progressBar; private boolean isLoading; /** * 报检属性名称 */ String[] strID,strUnit,strStatus,strStatusDesc,strNO,strDate,strLinkMan,strLinkTel,business; int maxCount;//数据库中的订单总数 ArrayList<SalesOrder> lists; View.OnClickListener cl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.order_main); setupViews(); } public void setupViews(){ if(maxCount==0){ addDeclaration(); } //线性布局 LinearLayout layout=new LinearLayout(this); //设置布局水平方向 layout.setOrientation(LinearLayout.HORIZONTAL); //进度条 progressBar=new ProgressBar(this); //把进度条加入到layout中 layout.addView(progressBar,mLayoutParams); //文本内容 TextView textView=new TextView(this); textView.setText("加载中..."); textView.setGravity(Gravity.CENTER_VERTICAL); //把文本加入到layout中 layout.addView(textView,FFlayoutParams); //设置layout的重力方向,即对齐方式是 layout.setGravity(Gravity.CENTER); //设置ListView的页脚layout loadingLayout = new LinearLayout(this); loadingLayout.addView(layout,mLayoutParams); loadingLayout.setGravity(Gravity.CENTER); //得到一个ListView用来显示条目 mListView=(ListView)findViewById(R.id.listview); //添加到页脚 mListView.addFooterView(loadingLayout); mMyAdapter=new MyAdapter(); mListView.setAdapter(mMyAdapter); mListView.setOnScrollListener(this); mListView.setTextFilterEnabled(true); mListView.setBackgroundResource(R.drawable.background); } /** * 向服务器请求待办列表 */ private String queryList(String uri){ String url = HttpUtil.BASE_URL+uri; System.out.println(url); return HttpUtil.getHTTPUtil().queryStringForPost(url); } public void addDeclaration(){ String result2=queryList("orderStatusList".trim()); lists=ReadXML.readXML(result2).getInspection2(); Log.v("result2--", result2); strID=new String[lists.size()]; strNO=new String[lists.size()]; strStatus=new String[lists.size()]; strStatusDesc=new String[lists.size()]; strUnit=new String[lists.size()]; strDate=new String[lists.size()]; strLinkMan=new String[lists.size()]; strLinkTel=new String[lists.size()]; business=new String[lists.size()]; int i2=0; for(SalesOrder in:lists){ strID[i2]=in.getId(); strStatus[i2]=in.getStatus(); strDate[i2]=in.getDate(); strLinkTel[i2]=in.getLinkTel(); //business[i2]=business[i2].replace("@", "\n"); if(in.getStatusDesc()!=null&&!in.getStatusDesc().equals("")){ strStatusDesc[i2]=StringUtil.unicodeToUtf8(in.getStatusDesc()); }else { strStatusDesc[i2]=""; } if(in.getUnit()!=null&&!in.getUnit().equals("")){ strUnit[i2]=StringUtil.unicodeToUtf8(in.getUnit()); }else { strUnit[i2]=""; } if(in.getLinkMan()!=null&&!in.getLinkMan().equals("")){ strLinkMan[i2]=StringUtil.unicodeToUtf8(in.getLinkMan()); }else { strLinkMan[i2]=""; } if(in.getBusinessItems()!=null&& !in.getBusinessItems().equals("")){ business[i2]=StringUtil.unicodeToUtf8(in.getBusinessItems()); business[i2]=business[i2].replace("||", "\n"); }else { business[i2]=""; } //business[i2]=business[i2].replace("|", "\n"); Log.v("business", business[i2]); strNO[i2]=in.getNo(); i2++; } maxCount=strID.length; } /** * 创建菜单 * */ @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, Menu.FIRST+1, 5, "返回首页").setIcon(android.R.drawable.ic_menu_delete); menu.add(Menu.NONE, Menu.FIRST+2, 2, "退出").setIcon(android.R.drawable.ic_menu_edit); // this.getMenuInflater().inflate(R.menu.options_menu, menu); return true; } //菜单项被选择事件 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu.FIRST + 1: Intent intent=new Intent(SalesOrderActivity.this,MainActivity.class); startActivity(intent); break; case Menu.FIRST + 2: Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); System.exit(0); break; } return false; } //定义自己的适配器,注意getCount和getView方法 private class MyAdapter extends BaseAdapter{ int count = 10 ; @Override public int getCount() { return count; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_data, null); TextView noTextView=(TextView)convertView.findViewById(R.id.ItemNO); noTextView.setText(strNO[position]); TextView LinkManTextView=(TextView)convertView.findViewById(R.id.ItemLinkMan); LinkManTextView.setText(strLinkMan[position]); TextView LinkTelTextView=(TextView)convertView.findViewById(R.id.ItemLinkTel); LinkTelTextView.setText(strLinkTel[position]); TextView busTextView=(TextView)convertView.findViewById(R.id.Itembusiness1); busTextView.setText(business[position]); return convertView; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { Log.i("test", "Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount); lastItem = firstVisibleItem + visibleItemCount -1; Log.i("test", "Scroll>>>lastItem:" + lastItem); Log.i("mMyAdapter.count", mMyAdapter.count+""); Log.i("maxCount", maxCount+""); if(mMyAdapter.count < maxCount){ if(firstVisibleItem + visibleItemCount == totalItemCount){ //isLoading用于控制重复加载 if(!isLoading){ new MyTask().execute(null); } } }else { mListView.removeFooterView(loadingLayout); } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } private class MyTask extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); isLoading =true; } @Override protected Void doInBackground(Void... params) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } if(mMyAdapter.count < maxCount){ if((maxCount - mMyAdapter.count) >10){ mMyAdapter.count+=10; }else { mMyAdapter.count+= maxCount -mMyAdapter.count; } } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); mMyAdapter.notifyDataSetChanged(); mListView.setSelection(lastItem); int currentPage = mMyAdapter.count / 10; Toast.makeText(getApplicationContext(), "第" + currentPage + "页", Toast.LENGTH_LONG).show(); isLoading = false; } } }
发表评论
-
Failed to receive access token
2013-04-24 12:52 1453在 com.weibo.net.Token.java文件中 ... -
Android实例五:Notification通知和Broadcast结合
2011-06-15 11:42 8263第一步.MainActivity.java pack ... -
Android实例四:BroadCast_Receiver
2011-06-15 10:36 6728第一步. MainActivity.java ... -
Android实例三:学习Service
2011-06-15 10:15 1335第一步.MainActivity.java pa ... -
Android实例二:手机数据库SQListe
2011-06-14 11:16 2156[code="java"] ... -
Android实例一:文件搜索
2011-06-13 20:12 3763本例子参考SDK开发范例大全 说明:以ListA ... -
关于android ListView的美化
2011-05-31 08:36 961用心的朋友应该会发现,listview中在设置了背景之后。会有 ... -
Android程序的退出终于完美解决,兼容所有SDK
2011-05-30 16:23 3662上网学了好多方法,关于Android的Activity如何退出 ... -
android兼容2.2及以前版本的退出方法
2011-05-30 14:16 1201首先,在首个activity中写: Intent inten ... -
缩放图片的方法
2011-05-26 15:35 1073代码一: public Bitmap ResizeBi ... -
Android对图片的压缩读取和保存
2011-05-26 12:46 1721在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情 ... -
android显示单位
2011-05-19 16:10 956px (pixels)像素 一般HVGA代表320 ... -
申请Google Map密钥
2011-05-17 15:25 17091.启动eclipse,依次单 ... -
SharedPreferences
2011-05-17 14:16 1254package wyf.wpf;//声明包语句 imp ... -
Content Provider
2011-05-17 11:54 1093package wyf.wpf; //声明包 ... -
轻量级数据库SQLite
2011-05-17 11:29 1186MySQLiteHelper.java im ... -
读取Rescource和asset文件夹中的文件
2011-05-17 11:01 5198package wyf.wpf; //声明包 ... -
数据存储之IO
2011-05-17 10:54 959package wyf.wpf; import jav ... -
android 检测当前网络并调用系统设置
2011-05-12 10:07 1670/** * 检测网络是否可用 */ pu ... -
Android 菜单(Menu)控件的使用
2011-05-11 14:05 714有两种方法,可以创建。 1.通过xml来创建 ...
相关推荐
ListView动态加载数据分页,使用Handler+线程和AsyncTask两种方法
主要为大家详细介绍了Android实现listview动态加载的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
android中listview数据分页加载功能实现
Listview分页加载数据.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
前言:最近做基于openfire聊天(仿QQ、微信)翻页查看聊天记录,为此做了根据时间倒序查看聊天记录,先声明这demo是根据id来倒序(原理和时间倒序一样) 文章地址:...
Android高级应用源码-Listview分页加载数据.zip
listView 分页加载 android 动态加载数据
Listview动态分页加载数据,有刷新效果,只要再加以处理便可。
当列表数据量大的时候我们一半都进行分页,android里分页一半不同于PC端,第几页的方式,一般都是滑动到底部数据自带加载,废话不多数了直接看代码:
自定义listview向上拉分页加载数据,文件中有应用的例子,简单易懂。
我们在看微博或是到网上商城如淘宝中购物时,每一个商家都会有很多商品,如果把某商家的所有商品都一次性加载过来,会造成手机卡顿,影响用户体验,所以每次加载少量数据,使用分页的形式,分多页加载,会很好的提高...
一页20条数据,下拉滑动到底部时加载新数据 关键点:给listview设置滚动监听,当滚动状态变化,且最后一个可见listitem(lv.getLastVisiblePosition())的位置等于listview的长度则加载新数据
安卓Android源码——Listview分页加载数据.zip
新浪微博项目一直想实现listview分页加载数据
Android 自定义ListView实现底部分页刷新与顶部下拉刷新 一.ListView 底部分页加载 整个底部分页加载,主要分一下几步: 1.加载底部自定义View; 2.响应OnScrollListener监听事件,onScroll方法记录最后可见的View ...
Android ListView 滑动分页 分页加载数据
安卓开发-Listview分页加载数据.zip
2,WindowsFormsApplication2涉及大文件分页读取技术和listview数据基础的载入,大文件分页读取已测试834MB文件能分页读出,不会卡死 3,WindowsFormsApplication3 主要针对listview 虚拟模式快速载入大数据,已测试 ...
Android应用源码之Listview分页加载数据.zip