android ListView实现下拉上拉刷新功能

android ListView实现下拉上拉刷新功能
主ListView类:

package com.carcare.refresh;/*** @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().*/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.BaseAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Scroller; import android.widget.TextView;import com.carcare.updataversion.cjh.R;public class NListView extends ListView implements OnScrollListener {private float mLastY = -1; // save event yprivate Scroller mScroller; // used for scroll backprivate OnScrollListener mScrollListener; // user's scroll listener// the interface to trigger refresh and load more.private IXListViewListener mListViewListener;// -- header viewprivate NListViewHeader mHeaderView;// header view content, use it to calculate the Header's height. And hide it// when disable pull refresh.private RelativeLayout mHeaderViewContent;private TextView mHeaderTimeView;private int mHeaderViewHeight; // header view's heightprivate boolean mEnablePullRefresh = true;private boolean mPullRefreshing = false; // is refreashing.// -- footer viewprivate NListViewFooter mFooterView;private RelativeLayout mFooterViewContent;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 NListView(Context context) {super(context);initWithContext(context);}public NListView(Context context, AttributeSet attrs) {super(context, attrs);initWithContext(context);}public NListView(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// user's listener (as a proxy).super.setOnScrollListener(this);// init header viewmHeaderView = new NListViewHeader(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 NListViewFooter(context);mFooterViewContent = (RelativeLayout) mFooterView.findViewById(R.id.xlistview_footer_content);// 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 {mFooterViewContent.setVisibility(View.VISIBLE);}}/*** enable or disable pull up load more feature.* * @param enable*/public void setPullLoadEnable(boolean enable) {mEnablePullLoad = enable;if (!mEnablePullLoad) {mFooterViewContent.setVisibility(View.INVISIBLE);mFooterView.setOnClickListener(null);} else {mPullLoading = false;mFooterViewContent.setVisibility(View.VISIBLE);mFooterView.setState(NListViewFooter.STATE_NORMAL);// 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(NListViewFooter.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(NListViewHeader.STATE_READY);} else {mHeaderView.setState(NListViewHeader.STATE_NORMAL);}}setSelection(0); // scroll to top each time}/*** reset header view's height.*/private void resetHeaderHeight() {int height = mHeaderView.getVisiableHeight();if (height == 0) // not visible.return;// refreshing and header isn't shown fully. do nothing.if (mPullRefreshing && height <= mHeaderViewHeight) {return;}int finalHeight = 0; // default: scroll back to dismiss header.// is refreshing, just scroll back to show all the header.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(NListViewFooter.STATE_READY);} else {mFooterView.setState(NListViewFooter.STATE_NORMAL);}}mFooterView.setBottomMargin(height);setSelection(mTotalItemCount - 1); // scroll to bottom}private 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(NListViewFooter.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 < 0)) {// last item, already pulled up or want to pull up.updateFooterHeight(-deltaY / OFFSET_RADIO);}break;default:mLastY = -1; // resetif (getFirstVisiblePosition() == 0) {// invoke refreshif (mEnablePullRefresh&& mHeaderView.getVisiableHeight() > mHeaderViewHeight) {mPullRefreshing = true;mHeaderView.setState(NListViewHeader.STATE_REFRESHING);if (mListViewListener != null) {mListViewListener.onRefresh();}}resetHeaderHeight();} else if (getLastVisiblePosition() == mTotalItemCount - 1) {// invoke load more.if (mEnablePullLoad&& mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA) {startLoadMore();}resetFooterHeight();}break;}return super.onTouchEvent(ev);}@Overridepublic void computeScroll() {if (mScroller.computeScrollOffset()) {if (mScrollBack == SCROLLBACK_HEADER) {mHeaderView.setVisiableHeight(mScroller.getCurrY());} else {mFooterView.setBottomMargin(mScroller.getCurrY());}postInvalidate();invokeOnScrolling();}super.computeScroll();}@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 user's listenermTotalItemCount = totalItemCount;if (mScrollListener != null) {mScrollListener.onScroll(view, firstVisibleItem, visibleItemCount,totalItemCount);}}public void setXListViewListener(IXListViewListener l) {mListViewListener = l;}/*** you can listen ListView.OnScrollListener or this one. it will invoke* onXScrolling when header/footer scroll back.*/public interface OnXScrollListener extends OnScrollListener {public void onXScrolling(View view);}/*** implements this interface to get refresh/load more event.*/public interface IXListViewListener {public void onRefresh();public void onLoadMore();} }


ListView的FootView:

package com.carcare.refresh;
/*** @file XFooterView.java* @create Mar 31, 2012 9:33:43 PM* @author Maxwin* @description XListView's footer*/import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;import com.carcare.updataversion.cjh.R;public class NListViewFooter extends LinearLayout {public final static int STATE_NORMAL = 0;public final static int STATE_READY = 1;public final static int STATE_LOADING = 2;public final static int STATE_END = 3;private Context mContext;private View mContentView;private View mProgressBar;private TextView mHintView;public NListViewFooter(Context context) {super(context);initView(context);}public NListViewFooter(Context context, AttributeSet attrs) {super(context, attrs);initView(context);}public void setState(int state) {mHintView.setVisibility(View.GONE);mProgressBar.setVisibility(View.GONE);mHintView.setVisibility(View.GONE);if (state == STATE_READY) {mHintView.setVisibility(View.VISIBLE);mHintView.setText("松开刷新数据");} else if (state == STATE_LOADING) {mProgressBar.setVisibility(View.VISIBLE);} else if(state == STATE_NORMAL){mHintView.setVisibility(View.VISIBLE);mHintView.setText("查看更多消息");}else{mHintView.setVisibility(View.GONE);mProgressBar.setVisibility(View.GONE);mHintView.setVisibility(View.GONE);}}public void setBottomMargin(int height) {if (height < 0) return ;LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)mContentView.getLayoutParams();lp.bottomMargin = height;mContentView.setLayoutParams(lp);}public int getBottomMargin() {LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)mContentView.getLayoutParams();return lp.bottomMargin;}/*** normal status*/public void normal() {mHintView.setVisibility(View.VISIBLE);mProgressBar.setVisibility(View.GONE);}/*** loading status */public void loading() {mHintView.setVisibility(View.GONE);mProgressBar.setVisibility(View.VISIBLE);}private void initView(Context context) {mContext = context;LinearLayout moreView = (LinearLayout)LayoutInflater.from(mContext).inflate(R.layout.xlistview_footer, null);addView(moreView);moreView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));mContentView = moreView.findViewById(R.id.xlistview_footer_content);mProgressBar = moreView.findViewById(R.id.xlistview_footer_progressbar);mHintView = (TextView)moreView.findViewById(R.id.xlistview_footer_hint_textview);}}

 ListView的HeaderView:

package com.carcare.refresh;/*** @file XListViewHeader.java* @create Apr 18, 2012 5:22:27 PM* @author Maxwin* @description XListView's header*/import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;import com.carcare.updataversion.cjh.R;public class NListViewHeader extends LinearLayout {private LinearLayout mContainer;private ImageView mArrowImageView;private ProgressBar mProgressBar;private TextView mHintTextView;private int mState = STATE_NORMAL;private Animation mRotateUpAnim;private Animation mRotateDownAnim;private final int ROTATE_ANIM_DURATION = 180;public final static int STATE_NORMAL = 0;public final static int STATE_READY = 1;public final static int STATE_REFRESHING = 2;public NListViewHeader(Context context) {super(context);initView(context);}/*** @param context* @param attrs*/public NListViewHeader(Context context, AttributeSet attrs) {super(context, attrs);initView(context);}private void initView(Context context) {// 初始情况,设置下拉刷新view高度LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 0);mContainer = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.xlistview_header, null);addView(mContainer, lp);setGravity(Gravity.BOTTOM);mArrowImageView = (ImageView)findViewById(R.id.xlistview_header_arrow);mHintTextView = (TextView)findViewById(R.id.xlistview_header_hint_textview);mProgressBar = (ProgressBar)findViewById(R.id.xlistview_header_progressbar);mRotateUpAnim = new RotateAnimation(0.0f, -180.0f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);mRotateUpAnim.setDuration(ROTATE_ANIM_DURATION);mRotateUpAnim.setFillAfter(true);mRotateDownAnim = new RotateAnimation(-180.0f, 0.0f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);mRotateDownAnim.setDuration(ROTATE_ANIM_DURATION);mRotateDownAnim.setFillAfter(true);}public void setState(int state) {if (state == mState) return ;if (state == STATE_REFRESHING) {	// 显示进度mArrowImageView.clearAnimation();mArrowImageView.setVisibility(View.INVISIBLE);mProgressBar.setVisibility(View.VISIBLE);} else {	// 显示箭头图片mArrowImageView.setVisibility(View.VISIBLE);mProgressBar.setVisibility(View.INVISIBLE);}switch(state){case STATE_NORMAL:if (mState == STATE_READY) {mArrowImageView.startAnimation(mRotateDownAnim);}if (mState == STATE_REFRESHING) {mArrowImageView.clearAnimation();}mHintTextView.setText("下拉刷新");break;case STATE_READY:if (mState != STATE_READY) {mArrowImageView.clearAnimation();mArrowImageView.startAnimation(mRotateUpAnim);mHintTextView.setText("松开刷新");}break;case STATE_REFRESHING:mHintTextView.setText("正在刷新");break;default:}mState = state;}public void setVisiableHeight(int height) {if (height < 0)height = 0;LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mContainer.getLayoutParams();lp.height = height;mContainer.setLayoutParams(lp);}public int getVisiableHeight() {return mContainer.getHeight();}}

 XML布局:

xlistview_footer.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content" ><RelativeLayoutandroid:id="@+id/xlistview_footer_content"android:layout_width="fill_parent"android:layout_height="wrap_content"android:padding="10dp" ><ProgressBarandroid:id="@+id/xlistview_footer_progressbar"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:visibility="invisible"android:indeterminateDrawable="@drawable/progress_medium_white" /><TextViewandroid:id="@+id/xlistview_footer_hint_textview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="查看更多消息" android:textColor="#000000"/></RelativeLayout></LinearLayout>

 xlistview_header.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="bottom" ><RelativeLayoutandroid:id="@+id/xlistview_header_content"android:layout_width="fill_parent"android:layout_height="60dp" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:gravity="center"android:orientation="vertical" android:id="@+id/xlistview_header_text"><TextViewandroid:id="@+id/xlistview_header_hint_textview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下拉刷新" android:textColor="#000000"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="3dp" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="12sp" android:textColor="#000000"/><TextViewandroid:id="@+id/xlistview_header_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="12sp"android:textColor="#000000" /></LinearLayout></LinearLayout><ImageViewandroid:id="@+id/xlistview_header_arrow"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@id/xlistview_header_text"android:layout_centerVertical="true"android:layout_marginLeft="-35dp"android:src="@drawable/news_z_arrow_down" /><ProgressBarandroid:id="@+id/xlistview_header_progressbar"android:layout_width="30dp"android:layout_height="30dp"android:layout_alignLeft="@id/xlistview_header_text"android:layout_centerVertical="true"android:layout_marginLeft="-40dp"android:visibility="invisible" android:indeterminateDrawable="@drawable/progress_medium_white"/></RelativeLayout></LinearLayout>

 

posted on 2012-12-25 11:08 蓝少泽 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Jack-Lu/archive/2012/12/25/2832019.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文简述npm和cnpm和yarn的区别

我是歌谣 放弃很容易 但是坚持一定很酷 前言 在前端的vue的项目中 不免会安装较多的文件依赖 对于常规安装依赖 我知道的方式有两种npm和yarn 1npm 1.1定义 npm: Nodejs下的包管理器。 1.2 安装 安装node环境 直接node官网安装一下 1.3 下载地址 node地址 下载安装好之后…

统计通话次数和时间的软件_通话时间统计app下载|通话时间统计安卓版下载 v1.0.3 - 跑跑车安卓网...

这是一款通话记录APP&#xff0c;用户可通过该软件来查看电话未接来电、通话时长等信息&#xff0c;十分便捷好用&#xff0c;有需要的快来下载使用吧&#xff01;软件介绍本程序用于通话记录、时长显示、分类统计、时段统计等参考。想知道最近你跟某人通了多长时间电话吗&…

idea html ajax,在 IntelliJ IDEA 8.1中编写一个ajax jquery实例,取不到页面上的值

在 IntelliJ IDEA 8.1中编写一个ajax jquery实例&#xff0c;取不到页面上的值0brnm12942014.08.17浏览115次分享举报public class AjaxServlet extends HttpServlet{protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)th…

Vue+Element!一千字带你编写合理的编辑,查看,新建!

我是歌谣 放弃很容易 但是坚持一定很酷 1前言 在我们的日常的开发过程中 不免会遇到需要操作同一页面得情况 2需求 比如一个页面 我们会有一个对应的一个表单 A:姓名:XXXX B&#xff1a;年龄:XXXX C:账号:XXXX D&#xff1a;密码:XXXX E:邮箱:XXXX XXXXXel-formel-input name…

script标签属性用type还是language?

一个网站的建设&#xff0c;经常会用到JavaScript,其中必须用到script标签来外调js文件&#xff0c;但是script标签属性用type还是language&#xff1f; type 和 language 属性都可用来指定 <script> 标签中的脚本的类型。所以可以使用下面两种属性&#xff1a; language…

惊呼!JavaScript基本数据类型和引用数据类型详解

前言 我是歌谣 知其然知其所以然 人人都有一个大厂梦 希望通过自己的一个总结分享可以给予大家带来帮助和提升。 本期知识点 JavaScript中基本数据类型和引用数据类型 目标 理解基本数据类型和引用数据类型的定义理解堆和栈数据类型分为哪些 定义 ECMAScript包括两个不同类型…

计算机的特点 分类及其应用,2016计算机知识:计算机的特点、分类及其应用(1)...

【导读】为了帮助广大考生更好的备考&#xff0c;中公事业单位考试网提供2016年计算机知识《计算机的特点、分类及其应用(1)》&#xff0c;为考生定制计算机基础知识复习计划&#xff0c;相信广大考生可以顺利计算机知识考试。一、第1代&#xff1a;电子管数字计算机(1946-1958…

面向船舶结构健康监测的数据采集与处理系统(一)系统架构

世界贸易快速发展起始于航海时代&#xff0c;而船舶作为重要的水上交通工具&#xff0c;有 其装载量大&#xff0c;运费低廉等优势。但船舶在运营过程中出现的某些结构处应力值 过大问题往往会给运营部门造成重大的损失&#xff0c;甚至造成大量的人员伤亡和严重 的环境污染…

Gunicorn 0.17 发布,Python HTTP 服务器

HTTP 服务器 Gunicorn 0.17 发布了&#xff0c;该版本改进内容包括&#xff1a; 支持绑定多个网卡地址支持 SSL支持 syslog增加 nworkers_changed 钩子为 post_request 钩子增加 response 参数使用 argparse 解析命令行参数&#xff08;废弃 optparse&#xff09;fix PWD detec…

优地机器人厂家_2019中国人工智能机器人企业TOP30榜单发布 优地科技跻身前十...

原标题&#xff1a;2019中国人工智能机器人企业TOP30榜单发布 优地科技跻身前十据2019《互联网周刊》&eNet研究院选择排行&#xff0c;“2019中国的人工智能机器人企业TOP30”榜单新鲜出炉&#xff0c;名单如下&#xff1a;从榜单可以看到&#xff0c;阿里巴巴、新松、百度…

计算机网络中的高层应用,第四章计算机网络中的高层应用-.ppt

第四章计算机网络中的高层应用-第四章 计算机网络中的高层应用 掌握C/S模式和B/S模式 熟练掌握常用的网络高层服务&#xff1a; WWW、Telnet 、FTP、EMAIL、DNS等 了解其它网络应用&#xff1a;BBS、IP电话、VOD等 引 言 网络的应用层是计算机开放互连环境与本地的操作系统环境…

硬核!原型和原型链详解

前言 我是歌谣 知其然知其所以然 人人都有一个大厂梦 希望通过自己的一个总结分享可以给予大家带来帮助和提升。 本期知识点 原型和原型链 目标 1理解原型和原型链 2理解构造函数 3理解构造函数 原型和原型链之间的关系 引用类型都是对象 基本数据类型和引用数据类型可以看下…

TCP/IP协议读书笔记(1)

TCP一共有四个主要的定时器&#xff0c;前面已经讲到了一个&#xff0d;&#xff0d;超时定时器&#xff0d;&#xff0d;是TCP里面最复杂的一个&#xff0c;另外的三个是&#xff1a; 坚持定时器保活定时器2MSL定时器其中坚持定时器用于防止通告窗口为0以后双方互相等待死锁的…

python 3 5_零基础学Python3(5):基础运算符(上)

人生苦短&#xff0c;我选Python前文传送门前言前面我们讲了变量的基础操作&#xff0c;本文我们接着讲运算符。运算符根据用途可以分为以下这么几类&#xff1a;算术运算符比较运算符赋值运算符逻辑运算符成员运算符身份运算符本篇我们先介绍前两个&#xff0c;算术运算符和比…

JS中的异步任务有哪些

JS中的异步任务有哪些 异步任务指的是&#xff0c;不进入主线程、而进入"任务队列"&#xff08;task queue&#xff09;的任务&#xff0c;只有等主线程任务执行完毕&#xff0c;"任务队列"开始通知主线程&#xff0c;请求执行任务&#xff0c;该任务才会…

spring下jndi配置

参考&#xff1a; 1&#xff09;Spring配置JNDI(Tomcat7) http://liuzidong.iteye.com/blog/962841 2&#xff09;在tomcat 6.0下配置JNDI及在Spring中的使用 http://hi.baidu.com/xulong7814/item/1b150826c4cd81cadcf69abf 转载于:https://www.cnblogs.com/lpshou/archive/20…

机场精细化管理_宇视科技智慧机坪解决方案助力机场实现精细化管理

飞行需求不断膨胀&#xff0c;有限的空域资源愈发拥挤&#xff0c;带来航班延误、资源浪费及航行安全等问题&#xff0c;降低机场运行效率。机坪作为空中交通起讫点&#xff0c;也是拥堵、延误多发区&#xff0c;对机场整体运行效率至关重要。如何在兼顾成本下&#xff0c;让机…

安徽省计算机水平考试试卷,第1次安徽省计算机水平考试试卷.doc

PAGEPAGE 62006第一次安徽省计算机水平考试试卷(ACCESS)单项选择题(每题1分&#xff0c;共40分)能将高级语言源程序转换为目标程序的是A)编译程序 B)解释程序 C)测试程序 D)编辑程序6位无符号二进制数能表示的最大十进制整数是A)64 B)63 C)32 D)31在Windows中&#xff0c;下列关…

总结:js延迟加载的方式有哪些?

该面试题主要考察的是程序的性能方面。性能优化的核心思想就是快&#xff0c;常见的优化手段有预先准备数据&#xff08;如缓存&#xff09;&#xff0c;按需获取&#xff0c;分段、异步获取等 由于JavaScript的阻塞特性&#xff08;单线程运行&#xff09;&#xff0c;在每一个…

Android中简单的日期格式化

自己遇到的一点格式化日期的方法&#xff0c;记下来 // 今天的信息 显示时间 dateStr DateFormat.getTimeFormat(context).format(date); // 日期 dateStr DateFormat.getDateFormat(context).format(date)" "DateFormat.getTimeF…