Android中达成下拉刷新
发布时间:2021-11-22 11:27:46 所属栏目:PHP教程 来源:互联网
导读:需求:项目中的消息列表界面要求实现类似sina微博的下拉刷新; 思路:一般的消息列表为ListView类型,将list加载到adapter中,再将adapter加载到ListView中,从而实现消息列表的展示。而下拉刷新要求给消息列表加一个头部,其中有图片(向上/向下箭头)和提
需求:项目中的消息列表界面要求实现类似sina微博的下拉刷新; 思路:一般的消息列表为ListView类型,将list加载到adapter中,再将adapter加载到ListView中,从而实现消息列表的展示。而下拉刷新要求给消息列表加一个头部,其中有图片(向上/向下箭头)和提示字样(下拉刷新/松开刷新),从而我们需要做的事情:1.需要做一个head.xm来实现头部的样式定义;2.需要自定义一个继承了ListView的MsgListView,在该类中将head加在MsgListView对象的头部;3.将原有的消息界面布局文件中的ListView改为cn.xd.microblogging.tools.MsgListView(包名.MsgListView);4.将原有的消息界面后台代码中创建的ListView对象改为MsgListView对象,注意消息界面Activity要继承ListActivity,并且实现其刷新监听。 说明:实现下拉刷新很简单,仅需要4个文件:MsgRcvListActivity.java(消息列表界面的后台文件,真正的刷新动作在这里完成,下拉刷新相关code下面列出),msgrcvlistactivity.xml(消息列表界面的前台文件,下拉刷新相关code下面列出),MsgListView.java(本文件拿来主义即可不用改,下拉刷新自定义的列表类,监听并执行下拉刷新、松开刷新、正在刷新、完成刷新等状态的改变,但真正的刷新动作不在这里完成,完整code下面列出),head.xml(本文件拿来主义即可不用改,下拉刷新的样式定义文件,包括向上、向下箭头,刷新状态提示等,完整code下面列出); 效果: 代码: 1.MsgRcvListActivity.java : publicclass MsgRcvListActivity extends ListActivity {//注意:要继承ListActivity …………//变量定义,略 MsgListView list; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.msgrcvlistactivity); list=(MsgListView)findViewById(Android.R.id.list);//继承ListActivity,id要写成android.R.id.list,否则报异常 …………//其他代码,略 //刷新监听,此处实现真正刷新 list.setonRefreshListener(new OnRefreshListener() { publicvoid onRefresh() { new AsyncTask<Void, Void, Void>() { protected Void doInBackground(Void... params) { try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } returnnull; } @Override protectedvoid onPostExecute(Void result) { adapter.notifyDataSetChanged(); new MsgLoad().execute();//刷新监听中,真正执行刷新动作 list.onRefreshComplete(); } }.execute(null); } }); list.setItemsCanFocus(false); list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); } …………//其他代码,略 publicclass MsgLoad extends AsyncTask<Void, Void, List<MsgBean>> { …………//其他代码,略 } } publicclass MsgRcvListActivity extends ListActivity {//注意:要继承ListActivity …………//变量定义,略 MsgListView list; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.msgrcvlistactivity); list=(MsgListView)findViewById(android.R.id.list);//继承ListActivity,id要写成android.R.id.list,否则报异常 …………//其他代码,略 //刷新监听,此处实现真正刷新 list.setonRefreshListener(new OnRefreshListener() { publicvoid onRefresh() { new AsyncTask<Void, Void, Void>() { protected Void doInBackground(Void... params) { try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } returnnull; } @Override protectedvoid onPostExecute(Void result) { adapter.notifyDataSetChanged(); new MsgLoad().execute();//刷新监听中,真正执行刷新动作 list.onRefreshComplete(); } }.execute(null); } }); list.setItemsCanFocus(false); list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); } …………//其他代码,略 publicclass MsgLoad extends AsyncTask<Void, Void, List<MsgBean>> { …………//其他代码,略 } } ![]() (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |