




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
activity_main.xml xlistview_header.xml xlistview_footer.xml MainActivitypackage com.example.shuaxin;import java.util.ArrayList;import com.example.adapter.MyAdapter;import com.example.vo.MusicList;import com.example.vo.PersonVo;import com.google.gson.Gson;import com.lidroid.xutils.HttpUtils;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.HttpMethod;import me.maxwin.view.XListView;import me.maxwin.view.XListView.IXListViewListener;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Toast;import android.app.Activity;import android.content.Intent;public class MainActivity extends Activity private int pager=1;private boolean flag=true;private HttpUtils httpUtils;private XListView xlv;private ArrayList list=new ArrayList();private MyAdapter adapter;Handler handler=new Handler();Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();public void init()httpUtils=new HttpUtils();xlv=(XListView) findViewById(R.id.xlv);/设置能上拉加载xlv.setPullLoadEnable(true);/设置能下拉刷新xlv.setPullRefreshEnable(true);/数据getData();adapter = new MyAdapter(list, this);xlv.setAdapter(adapter);/设置监听xlv.setXListViewListener(new IXListViewListener() /下拉刷新Overridepublic void onRefresh() / TODO Auto-generated method stubhandler.postDelayed(new Runnable() Overridepublic void run() /刷新就是清空原来的数据,加载新数据list.clear();getData();adapter = new MyAdapter(list, MainActivity.this);xlv.setAdapter(adapter);onLoad();, 2000);/上拉加载Overridepublic void onLoadMore() / TODO Auto-generated method stubhandler.postDelayed(new Runnable() Overridepublic void run() / TODO Auto-generated method stubgetData();adapter.notifyDataSetChanged();onLoad();, 2000););xlv.setOnItemClickListener(new OnItemClickListener() Overridepublic void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) / TODO Auto-generated method stubIntent in=new Intent(MainActivity.this, DetilActivity.class);in.putExtra(123, list.get(arg2-1).getMc_imageurl();startActivity(in););/加载数据private void getData() String url=6:8080/Music03/SelectMusic?u_id=&page=10&page_size=+pager;httpUtils.send(HttpMethod.GET, url, new RequestCallBack() Overridepublic void onFailure(HttpException arg0, String arg1) / TODO Auto-generated method stubLog.i(TAG, +请求失败);Overridepublic void onSuccess(ResponseInfo arg0) / TODO Auto-generated method stubLog.i(TAG, 服务器返回的数据=+arg0.result);Gson g=new Gson();PersonVo pv=g.fromJson(arg0.result, PersonVo.class);pager+;if(pv.getMusiclist().size()=10)list.addAll(pv.getMusiclist();adapter.notifyDataSetChanged();elseif(flag)list.addAll(pv.getMusiclist();adapter.notifyDataSetChanged();flag=false;elseToast.makeText(MainActivity.this, 没有更多数据了!, Toast.LENGTH_LONG).show(););public void onLoad()xlv.stopLoadMore();xlv.stopRefresh();xlv.setRefreshTime(刚刚);/使用webwei显示图片/wv.loadUrl(img_url);/wv.setWebViewClient(new WebViewClient();XListView/* * file XListView.java * package me.maxwin.view * create Mar 18, 2012 6:28:41 PM * author Maxwin * description An ListView support (a) Pull down to refresh, (b) Pull up to load more. * Implement IXListViewListener, and see stopRefresh() / stopLoadMore(). */package me.maxwin.view;import com.example.shuaxin.R;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.view.animation.DecelerateInterpolator;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.RelativeLayout;import android.widget.Scroller;import android.widget.TextView;public class XListView extends ListView implements OnScrollListener private float mLastY = -1; / save event yprivate Scroller mScroller; / used for scroll backprivate OnScrollListener mScrollListener; / users scroll listener/ the interface to trigger refresh and load more.private IXListViewListener mListViewListener;/ - header viewprivate XListViewHeader mHeaderView;/ header view content, use it to calculate the Headers height. And hide it/ when disable pull refresh.private RelativeLayout mHeaderViewContent;private TextView mHeaderTimeView;private int mHeaderViewHeight; / header views heightprivate boolean mEnablePullRefresh = true;private boolean mPullRefreshing = false; / is refreashing./ - footer viewprivate XListViewFooter mFooterView;private boolean mEnablePullLoad;private boolean mPullLoading;private boolean mIsFooterReady = false;/ total list items, used to detect is at the bottom of listview.private int mTotalItemCount;/ for mScroller, scroll back from header or footer.private int mScrollBack;private final static int SCROLLBACK_HEADER = 0;private final static int SCROLLBACK_FOOTER = 1;private final static int SCROLL_DURATION = 400; / scroll back durationprivate final static int PULL_LOAD_MORE_DELTA = 50; / when pull up = 50px/ at bottom, trigger/ load more.private final static float OFFSET_RADIO = 1.8f; / support iOS like pull/ feature./* * param context */public XListView(Context context) super(context);initWithContext(context);public XListView(Context context, AttributeSet attrs) super(context, attrs);initWithContext(context);public XListView(Context context, AttributeSet attrs, int defStyle) super(context, attrs, defStyle);initWithContext(context);private void initWithContext(Context context) mScroller = new Scroller(context, new DecelerateInterpolator();/ XListView need the scroll event, and it will dispatch the event to/ users listener (as a proxy).super.setOnScrollListener(this);/ init header viewmHeaderView = new XListViewHeader(context);mHeaderViewContent = (RelativeLayout) mHeaderView.findViewById(R.id.xlistview_header_content);mHeaderTimeView = (TextView) mHeaderView.findViewById(R.id.xlistview_header_time);addHeaderView(mHeaderView);/ init footer viewmFooterView = new XListViewFooter(context);/ init header heightmHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() Overridepublic void onGlobalLayout() mHeaderViewHeight = mHeaderViewContent.getHeight();getViewTreeObserver().removeGlobalOnLayoutListener(this););Overridepublic void setAdapter(ListAdapter adapter) / make sure XListViewFooter is the last footer view, and only add once.if (mIsFooterReady = false) mIsFooterReady = true;addFooterView(mFooterView);super.setAdapter(adapter);/* * enable or disable pull down refresh feature. * * param enable */public void setPullRefreshEnable(boolean enable) mEnablePullRefresh = enable;if (!mEnablePullRefresh) / disable, hide the contentmHeaderViewContent.setVisibility(View.INVISIBLE); else mHeaderViewContent.setVisibility(View.VISIBLE);/* * enable or disable pull up load more feature. * * param enable */public void setPullLoadEnable(boolean enable) mEnablePullLoad = enable;if (!mEnablePullLoad) mFooterView.hide();mFooterView.setOnClickListener(null);/make sure pull up dont show a line in bottom when listview with one page setFooterDividersEnabled(false); else mPullLoading = false;mFooterView.show();mFooterView.setState(XListViewFooter.STATE_NORMAL);/make sure pull up dont show a line in bottom when listview with one page setFooterDividersEnabled(true);/ both pull up and click will invoke load more.mFooterView.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) startLoadMore(););/* * stop refresh, reset header view. */public void stopRefresh() if (mPullRefreshing = true) mPullRefreshing = false;resetHeaderHeight();/* * stop load more, reset footer view. */public void stopLoadMore() if (mPullLoading = true) mPullLoading = false;mFooterView.setState(XListViewFooter.STATE_NORMAL);/* * set last refresh time * * param time */public void setRefreshTime(String time) mHeaderTimeView.setText(time);private void invokeOnScrolling() if (mScrollListener instanceof OnXScrollListener) OnXScrollListener l = (OnXScrollListener) mScrollListener;l.onXScrolling(this);private void updateHeaderHeight(float delta) mHeaderView.setVisiableHeight(int) delta+ mHeaderView.getVisiableHeight();if (mEnablePullRefresh & !mPullRefreshing) / 未处于刷新状态,更新箭头if (mHeaderView.getVisiableHeight() mHeaderViewHeight) mHeaderView.setState(XListViewHeader.STATE_READY); else mHeaderView.setState(XListViewHeader.STATE_NORMAL);setSelection(0); / scroll to top each time/* * reset header views height. */private void resetHeaderHeight() int height = mHeaderView.getVisiableHeight();if (height = 0) / not visible.return;/ refreshing and header isnt shown fully. do nothing.if (mPullRefreshing & height mHeaderViewHeight) finalHeight = mHeaderViewHeight;mScrollBack = SCROLLBACK_HEADER;mScroller.startScroll(0, height, 0, finalHeight - height,SCROLL_DURATION);/ trigger computeScrollinvalidate();private void updateFooterHeight(float delta) int height = mFooterView.getBottomMargin() + (int) delta;if (mEnablePullLoad & !mPullLoading) if (height PULL_LOAD_MORE_DELTA) / height enough to invoke load/ more.mFooterView.setState(XListViewFooter.STATE_READY); else mFooterView.setState(XListViewFooter.STATE_NORMAL);mFooterView.setBottomMargin(height);/setSelection(mTotalItemCount - 1); / scroll to bottomprivate void resetFooterHeight() int bottomMargin = mFooterView.getBottomMargin();if (bottomMargin 0) mScrollBack = SCROLLBACK_FOOTER;mScroller.startScroll(0, bottomMargin, 0, -bottomMargin,SCROLL_DURATION);invalidate();private void startLoadMore() mPullLoading = true;mFooterView.setState(XListViewFooter.STATE_LOADING);if (mListViewListener != null) mListViewListener.onLoadMore();Overridepublic boolean onTouchEvent(MotionEvent ev) if (mLastY = -1) mLastY = ev.getRawY();switch (ev.getAction() case MotionEvent.ACTION_DOWN:mLastY = ev.getRawY();break;case MotionEvent.ACTION_MOVE:final float deltaY = ev.getRawY() - mLastY;mLastY = ev.getRawY();if (getFirstVisiblePosition() = 0& (mHeaderView.getVisiableHeight() 0 | deltaY 0) / the first item is showing, header has shown or pull down.updateHeaderHeight(deltaY / OFFSET_RADIO);invokeOnScrolling(); else if (getLastVisiblePosition() = mTotalItemCount - 1& (mFooterView.getBottomMargin() 0 | deltaY mHeaderViewHeight) mPullRefreshing = true;mHeaderView.setState(XListViewHeader.STATE_REFRESHING);if (mListViewListener != null) mListViewListener.onRefresh();resetHeaderHeight(); else if (getLastVisiblePosition() = mTotalItemCount - 1) / invoke load more.if (mEnablePullLoad & mFooterView.getBottomMargin() PULL_LOAD_MORE_DELTA & !mPullLoading) startLoadMore();resetFooterHeight();break;return super.onTouchEvent(ev);Overridepublic void computeScroll() if (mSputeScrollOffset() if (mScrollBack = SCROLLBACK_HEADER) mHeaderView.setVisiableHeight(mScroller.getCurrY(); else mFooterView.setBottomMargin(mScroller.getCurrY();postInvalidate();invokeOnScrolling();puteScroll();Overridepublic void setOnScrollListener(OnScrollListener l) mScrollListener = l;Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) if (mScrollListener != null) mScrollListener.onScrollStateChanged(view, scrollState);Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) / send to use
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械技术员面试题及答案
- 生活垃圾收集工特殊工艺考核试卷及答案
- 儿科护理学题库期末考及答案解析
- 南方医科大生化题库护理及答案解析
- 陕西安全题库及答案解析
- 新能源汽车安全检测题库及答案解析
- 小学生安全网络测试题及答案解析
- 保密网络安全答题库及答案解析
- 铁路机车电工理念考核试卷及答案
- 九型人格测试题与答案-2025年
- 消防员心理测试题库及答案解析
- 2025小升初租房合同模板
- 放射科造影剂过敏反应应急处理预案
- 《大嘴巴纸玩偶》名师课件
- 2025年上海市高考英语热点复习:阅读理解说明文
- 国家管网集团合同范本
- 中医全科学科
- Unit 1 Teenage life单词变形-学生背诵与默写清单-2024-2025学年高中英语人教版(2019)必修第一册
- 铁路技术规章:018铁路军事运输管理办法
- 生物发酵安全培训
- 2024-2025学年广东省深圳市九年级上学期期中数学试题及答案
评论
0/150
提交评论