加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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>> {
…………//其他代码,略
}
}
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读