ListView实现下拉刷新加载更多的实例代码(直接拿来用)

ListView实现下拉刷新加载更多的实例代码(直接拿来用),第1张

概述ListViewApibixu好好看看mNewsAdapter.notifyDataSetChanged();//刷新ListView自定义的RefreashListView

ListVIEw API bixu 好好看看

mNewsAdapter.notifyDataSetChanged();//刷新ListVIEw

自定义的RefreashListVIEw

package com.itguang.dell_pc.myapplication.vIEw;import androID.content.Context;import androID.util.AttributeSet;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.vIEw.animation.Animation;import androID.vIEw.animation.RotateAnimation;import androID.Widget.AbsListVIEw;import androID.Widget.ImageVIEw;import androID.Widget.ListVIEw;import androID.Widget.Progressbar;import androID.Widget.TextVIEw;import com.itguang.dell_pc.myapplication.R;import java.text.SimpleDateFormat;import java.util.Date;/*** 作者: 小光哥 on 2016/7/7.* 邮箱: 1445037803@qq.com* 修订历史:* 描述:*         ┏┓   ┏┓*        ┏┛┻━━━┛┻┓━━━━┻┓*        ┃       ┃*        ┃   ━   ┃*        ┃ >   < ┃*        ┃       ┃*        ┃... ⌒ ... ┃*        ┃       ┃*        ┗━┓   ┏━┛*          ┃   ┃ Code is far away from BUG with the animal protecting*          ┃ 史 ┃ 神兽保佑,代码无BUG*          ┃ 诗 ┃*          ┃ 之 ┃*          ┃ 宠 ┃*          ┃   ┃*          ┃   ┗━━━┓*          ┃BUG天敌   ┣┓┣┓┣┓┣┓┣┓*          ┃       ┏┛*          ┗┓┓┏━┳┓┏┛*           ┃┫┫ ┃┫┫*           ┗┻┛ ┗┻┛*/public class RefreshListVIEw extends ListVIEw implements AbsListVIEw.OnScrollListener {private static final int STATE_PulL_REFRESH = 0;// 下拉刷新private static final int STATE_RELEASE_REFRESH = 1;// 松开刷新private static final int STATE_REFRESHING = 2;// 正在刷新private int mCurrrentState = STATE_PulL_REFRESH;// 当前状态private VIEw mheaderVIEw;private TextVIEw tvTitle;private TextVIEw tvTime;private Progressbar pbProgress;private ImageVIEw ivArrow;private RotateAnimation animUp;private RotateAnimation animDown;private int startY = -1;// 滑动起点的y坐标private int endY;private int measuredHeight;private int mFooterVIEwHeight;private VIEw footerVIEw;public RefreshListVIEw(Context context) {super(context);initheaderVIEw();initFooterVIEw();}public RefreshListVIEw(Context context,AttributeSet attrs) {super(context,attrs);initheaderVIEw();initFooterVIEw();}public RefreshListVIEw(Context context,AttributeSet attrs,int defStyleAttr) {super(context,attrs,defStyleAttr);initheaderVIEw();initFooterVIEw();}/*** 初始化头布局*/private voID initheaderVIEw() {mheaderVIEw = VIEw.inflate(getContext(),R.layout.refeeash_header,null);this.addheaderVIEw(mheaderVIEw);tvTitle = (TextVIEw) mheaderVIEw.findVIEwByID(R.ID.tv_Title);tvTime = (TextVIEw) mheaderVIEw.findVIEwByID(R.ID.tv_time);pbProgress = (Progressbar) mheaderVIEw.findVIEwByID(R.ID.pb_progress);ivArrow = (ImageVIEw) mheaderVIEw.findVIEwByID(R.ID.iv_arr);mheaderVIEw.measure(0,0);//先测量再拿到它的高度measuredHeight = mheaderVIEw.getMeasuredHeight();mheaderVIEw.setpadding(0,-measuredHeight,0);initArrowAnim();tvTime.setText("最后刷新时间:" + getCurrentTime());}/*** 初始化脚布局*/public voID initFooterVIEw() {footerVIEw = VIEw.inflate(getContext(),R.layout.refreash_ListvIEw_footer,null);this.addFooterVIEw(footerVIEw);footerVIEw.measure(0,0);mFooterVIEwHeight = footerVIEw.getMeasuredHeight();footerVIEw.setpadding(0,-mFooterVIEwHeight,0);//默认隐藏脚布局this.setonScrollListener(this);}private boolean isLoadingMOre;@OverrIDepublic voID onScrollStateChanged(AbsListVIEw vIEw,int scrollState) {if (scrollState == SCRolL_STATE_FliNG || scrollState == SCRolL_STATE_IDLE) {if (getLastVisibleposition() == getCount() - 1 && !isLoadingMOre) {//滑倒最后System.out.println("到底了......");footerVIEw.setpadding(0,0);setSelection(getCount() - 1);//改变ListVIEw的显示位置isLoadingMOre = true;if (mListener != null) {mListener.onLoadMore();}}}}@OverrIDepublic voID onScroll(AbsListVIEw vIEw,int firstVisibleItem,int visibleItemCount,int totalitemCount) {}@OverrIDepublic boolean ontouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:startY = (int) ev.getRawY();break;case MotionEvent.ACTION_MOVE:if (startY == -1) {//有时候不会响应 MotionEvent.ACTION_DOWN 事件,这是要重新获取startY坐标startY = (int) ev.getRawY();}//当正在刷新的时候,跳出循环,不再执行下面逻辑if (mCurrrentState == STATE_RELEASE_REFRESH) {break;}endY = (int) ev.getRawY();int dy = endY - startY;//计算手指滑动距离if (dy > 0 && getFirstVisibleposition() == 0) {// 只有下拉并且当前是第一个item,才允许下拉int padding = dy - measuredHeight;//计算paddingmheaderVIEw.setpadding(0,padding,0);//设置当前paddingif (padding > 0 && mCurrrentState != STATE_RELEASE_REFRESH) {mCurrrentState = STATE_RELEASE_REFRESH;refreshState();} else if (padding < 0 && mCurrrentState != STATE_PulL_REFRESH) {// 改为下拉刷新状态mCurrrentState = STATE_PulL_REFRESH;refreshState();}return true;}break;case MotionEvent.ACTION_UP:startY = -1;//手指抬起重置//当状态是松开刷新时抬起了手指,正在刷新if (mCurrrentState == STATE_RELEASE_REFRESH) {mCurrrentState = STATE_REFRESHING;// 正在刷新mheaderVIEw.setpadding(0,0);// 显示refreshState();} else if (mCurrrentState == STATE_PulL_REFRESH) {mheaderVIEw.setpadding(0,0);// 隐藏}break;default:break;}return super.ontouchEvent(ev);}private String getCurrentTime() {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String currentTime = format.format(new Date());return currentTime;}private voID initArrowAnim() {//初始化箭头动画animUp = new RotateAnimation(0,-180,Animation.relative_TO_SELF,0.5f,0.5f);animUp.setDuration(500);animUp.setFillAfter(true);//保持状态//箭头向下动画animDown = new RotateAnimation(-180,0.5f);animDown.setDuration(500);animDown.setFillAfter(true);}/*** 刷新下拉控件的布局*/private voID refreshState() {switch (mCurrrentState) {case STATE_PulL_REFRESH:tvTitle.setText("下拉刷新");ivArrow.setVisibility(VIEw.VISIBLE);pbProgress.setVisibility(VIEw.INVISIBLE);ivArrow.startAnimation(animDown);break;case STATE_RELEASE_REFRESH:tvTitle.setText("松开刷新");ivArrow.setVisibility(VIEw.VISIBLE);pbProgress.setVisibility(VIEw.INVISIBLE);ivArrow.startAnimation(animUp);break;case STATE_REFRESHING:tvTitle.setText("正在刷新...");ivArrow.clearanimation();// 必须先清除动画,才能隐藏ivArrow.setVisibility(VIEw.INVISIBLE);pbProgress.setVisibility(VIEw.VISIBLE);if (mListener != null) {mListener.onRefreash();}break;default:break;}}OnRefreashListener mListener;public voID setonRefreashListener(OnRefreashListener Listener) {mListener = Listener;}public interface OnRefreashListener {voID onRefreash();voID onLoadMore();}/*** 收起下拉刷新的控件*/public voID onRefreashComplete() {if (isLoadingMOre) {footerVIEw.setpadding(0,0);//隐藏脚布局isLoadingMOre = false;} else {mCurrrentState = STATE_PulL_REFRESH;tvTitle.setText("下拉刷新");ivArrow.setVisibility(VIEw.VISIBLE);pbProgress.setVisibility(VIEw.INVISIBLE);mheaderVIEw.setpadding(0,0);//隐藏}}public voID noFooterVIEw() {footerVIEw.setpadding(0,mFooterVIEwHeight,0);//隐藏脚布局}}

代码中引用RefreashListVIEw

package com.itguang.dell_pc.myapplication.base;import androID.app.Activity;import androID.support.v4.vIEw.PagerAdapter;import androID.support.v4.vIEw.VIEwPager;import androID.text.TextUtils;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.BaseAdapter;import androID.Widget.ImageVIEw;import androID.Widget.ListVIEw;import androID.Widget.TextVIEw;import androID.Widget.Toast;import com.Google.gson.Gson;import com.itguang.dell_pc.myapplication.R;import com.itguang.dell_pc.myapplication.domain.NewsData;import com.itguang.dell_pc.myapplication.domain.TabData;import com.itguang.dell_pc.myapplication.globe.GlobeContents;import com.itguang.dell_pc.myapplication.vIEw.RefreshListVIEw;import com.lIDroID.xutils.BitmapUtils;import com.lIDroID.xutils.httpUtils;import com.lIDroID.xutils.VIEwUtils;import com.lIDroID.xutils.exception.httpException;import com.lIDroID.xutils.http.ResponseInfo;import com.lIDroID.xutils.http.callback.RequestCallBack;import com.lIDroID.xutils.http.clIEnt.httpRequest;import com.lIDroID.xutils.vIEw.annotation.VIEwInject;import com.vIEwpagerindicator.CirclePageIndicator;import java.util.ArrayList;/*** 作者: 小光哥 on 2016/4/22.* 邮箱: 1445037803@qq.com* 修订历史:* 描述:*         ┏┓   ┏┓*        ┏┛┻━━━┛┻┓━━━━┻┓*        ┃       ┃*        ┃   ━   ┃*        ┃ >   < ┃*        ┃       ┃*        ┃... ⌒ ... ┃*        ┃       ┃*        ┗━┓   ┏━┛*          ┃   ┃ Code is far away from BUG with the animal protecting*          ┃ 史 ┃ 神兽保佑,代码无BUG*          ┃ 诗 ┃*          ┃ 之 ┃*          ┃ 宠 ┃*          ┃   ┃*          ┃   ┗━━━┓*          ┃BUG天敌   ┣┓┣┓┣┓┣┓┣┓*          ┃       ┏┛*          ┗┓┓┏━┳┓┏┛*           ┃┫┫ ┃┫┫*           ┗┻┛ ┗┻┛*//*** 也签详情页*/public class TabDetailPager extends BaseMenuDetailPager implements VIEwPager.OnPagechangelistener {/*** @param activity* @param newsTabData*/NewsData.NewsTabData mTabdata;private String mUrl;private TabData mTabDetailData;@VIEwInject(R.ID.vp_news)private VIEwPager mVIEwPager;@VIEwInject(R.ID.lv_newsList)private RefreshListVIEw newsListVIEw;//新闻列表@VIEwInject(R.ID.tv_Title)private TextVIEw tvTitle;//新闻标题@VIEwInject(R.ID.indicator)private CirclePageIndicator indicator;//头条新闻指示器private ArrayList<TabData.topNewsData> mtopNewsList;//新闻数据集合private int[] images;private ArrayList<TabData.TabNewsData> mNewsList;//新闻数据集合private String mMoreUrl;private NewsAdapter mNewsAdapter;public TabDetailPager(Activity activity,NewsData.NewsTabData newsTabData) {super(activity);mTabdata = newsTabData;mUrl = GlobeContents.SERVER_URL + mTabdata.url;}@OverrIDepublic VIEw initVIEws() {images = new int[]{R.drawable.topnews1,R.drawable.topnews21,R.drawable.topnews31,R.drawable.topimage};VIEw vIEw = VIEw.inflate(mActivity,R.layout.tab_detail_pager,null);VIEw headerVIEw = VIEw.inflate(mActivity,R.layout.List_header_topnews,null);//加载头布局// TextVIEw tvTitle = (TextVIEw) vIEw.findVIEwByID(R.ID.tv_Title);//事件注入VIEwUtils.inject(this,vIEw);VIEwUtils.inject(this,headerVIEw);mVIEwPager.addOnPagechangelistener(this);//将肥头条新闻以头布局形式加载到ListVIEw中newsListVIEw.addheaderVIEw(headerVIEw);//设置下拉刷新监听newsListVIEw.setonRefreashListener(new RefreshListVIEw.OnRefreashListener() {@OverrIDepublic voID onRefreash() {getDataFromServer();}@OverrIDepublic voID onLoadMore() {if (mMoreUrl != null) {getMoreDataFromServer();} else {Toast.makeText(mActivity,"没有更多数据了",Toast.LENGTH_SHORT).show();newsListVIEw.onRefreashComplete();// newsListVIEw.noFooterVIEw();}}});return vIEw;}@OverrIDepublic voID initData() {getDataFromServer();//这是一个异步的,}private voID getDataFromServer() {httpUtils utils = new httpUtils();utils.send(httpRequest.httpMethod.GET,mUrl,new RequestCallBack<String>() {@OverrIDepublic voID onSuccess(ResponseInfo<String> responseInfo) {String result = (String) responseInfo.result;// System.out.println("页签详情页返回结果:+++++++++++++++++++" + result);praseData(result,false);newsListVIEw.onRefreashComplete();}@OverrIDepublic voID onFailure(httpException e,String s) {Toast.makeText(mActivity,"获取Tabdetaildata失败!",Toast.LENGTH_SHORT).show();// error.printstacktrace();}});}/*** 加载下一页数据*/private voID getMoreDataFromServer() {httpUtils utils = new httpUtils();utils.send(httpRequest.httpMethod.GET,mMoreUrl,true);newsListVIEw.onRefreashComplete();}@OverrIDepublic voID onFailure(httpException e,Toast.LENGTH_SHORT).show();// error.printstacktrace();}});}/*** 把Json字符串解析成为Json对象** @param result 要解析的的Json字符串*/private voID praseData(String result,boolean isLoadMore) {Gson gson = new Gson();mTabDetailData = gson.fromJson(result,TabData.class);//返回TabData对象System.out.println("页签详情页:+++++++++++++++++++++" + mTabdata);//处理更多页面的逻辑final String more = mTabDetailData.data.more;if (!TextUtils.isEmpty(more)) {mMoreUrl = GlobeContents.SERVER_URL + more;} else {mMoreUrl = null;}if (!isLoadMore) {mtopNewsList = mTabDetailData.data.topnews;mNewsList = mTabDetailData.data.news;if (mtopNewsList != null) {mVIEwPager.setAdapter(new topNewsAdapter());indicator.setonPagechangelistener(this);indicator.setVIEwPager(mVIEwPager);//在设置完适配器后,在设置指示器indicator.setSnap(true);//设置快照显示indicator.onPageSelected(0);//indicator会自作聪明,离开时会记录当前位置tvTitle.setText(mtopNewsList.get(0).Title);}mNewsAdapter = new NewsAdapter();//填充新闻列表if (mNewsList != null) {newsListVIEw.setAdapter(mNewsAdapter);}} else {//如果是加载下一页,需要将数据追加给原来的集合ArrayList<TabData.TabNewsData> news = mTabDetailData.data.news;mNewsList.addAll(news);mNewsAdapter.notifyDataSetChanged();//刷新ListVIEw}}@OverrIDepublic voID onPageScrolled(int position,float positionOffset,int positionOffsetPixels) {}@OverrIDepublic voID onPageSelected(int position) {//更新头条新闻标题TabData.topNewsData topNewsData = mtopNewsList.get(position);tvTitle.setText(topNewsData.Title);}@OverrIDepublic voID onPageScrollStateChanged(int state) {}/*** ListVIEw适配器*/class NewsAdapter extends BaseAdapter {private final BitmapUtils utils;NewsAdapter() {utils = new BitmapUtils(mActivity);utils.configDefaultLoadingImage(R.drawable.pic_item_List_default);}@OverrIDepublic int getCount() {return mNewsList.size();}@OverrIDepublic Object getItem(int position) {return mNewsList.get(position);}@OverrIDepublic long getItemID(int position) {return position;}@OverrIDepublic VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) {VIEwHolder holder;if (convertVIEw == null) {convertVIEw = VIEw.inflate(mActivity,R.layout.List_news_item,null);holder = new VIEwHolder();holder.ivPic = (ImageVIEw) convertVIEw.findVIEwByID(R.ID.iv_pic);holder.tvTitle = (TextVIEw) convertVIEw.findVIEwByID(R.ID.tv_Title);holder.tvDate = (TextVIEw) convertVIEw.findVIEwByID(R.ID.tv_date);convertVIEw.setTag(holder);} else {holder = (VIEwHolder) convertVIEw.getTag();}TabData.TabNewsData item = (TabData.TabNewsData) getItem(position);holder.tvTitle.setText(item.Title);holder.tvDate.setText(item.pubdate);utils.display(holder.ivPic,item.listimage);return convertVIEw;}}static class VIEwHolder {public TextVIEw tvTitle;public TextVIEw tvDate;public ImageVIEw ivPic;}/*** VIEwpager适配器*/class topNewsAdapter extends PagerAdapter {private BitmapUtils bitmapUtils;topNewsAdapter() {bitmapUtils = new BitmapUtils(mActivity);bitmapUtils.configDefaultLoadingImage(R.drawable.topnews_item_default);//设置默认图片}@OverrIDepublic int getCount() {return mTabDetailData.data.topnews.size();}@OverrIDepublic boolean isVIEwFromObject(VIEw vIEw,Object object) {return vIEw == object;}@OverrIDepublic Object instantiateItem(VIEwGroup container,int position) {ImageVIEw imageVIEw = new ImageVIEw(mActivity);imageVIEw.setimageResource(images[position]);imageVIEw.setScaleType(ImageVIEw.ScaleType.FIT_XY);//基于控件大小填充图片// TabData.topNewsData topNewsData = mtopNewsList.get(position);// bitmapUtils.display(imageVIEw,mTabDetailData.data.topnews.get(position).url);container.addVIEw(imageVIEw);return imageVIEw;}@OverrIDepublic voID destroyItem(VIEwGroup container,int position,Object object) {container.removeVIEw((VIEw) object);}}}

以上所述是小编给大家介绍的ListVIEw实现下拉刷新加载更多的实例代码(直接拿来用)的全部叙述,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的ListView实现下拉刷新加载更多的实例代码(直接拿来用)全部内容,希望文章能够帮你解决ListView实现下拉刷新加载更多的实例代码(直接拿来用)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1148761.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存