以后会经常用到下拉刷新和上拉刷新的,今天用了,就记录一下,方便以后的使用。
下载地址:https://github.com/chrisbanes/Android-PullToRefresh
1.导包
2.xml布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
3.Activity中:
public class MainActivity extends Activity implements
OnRefreshListener<ListView> {
private MyHandler handler = new MyHandler();
/** 从第三页开始显示吧 */
private int current_head_index = 3;
/** 后面是第三页开始 */
private int current_foot_index = 4;
private PullToRefreshListView mPullRefreshListView;
/** 数据集合 */
private ArrayList<String> data;
/** 简单的适配器 */
private ArrayAdapter<String> adapter;
private boolean ishead = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.listview);
data = new ArrayList<String>();
addData();
adapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, data);
mPullRefreshListView.setOnRefreshListener(this);
/** 上下都刷新 */
mPullRefreshListView.setMode(Mode.BOTH);
mPullRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel(
"下拉中");
mPullRefreshListView.getLoadingLayoutProxy(false, true)
.setRefreshingLabel("刷新中");
mPullRefreshListView.getLoadingLayoutProxy(false, true)
.setReleaseLabel("释放了");
/** 需要listView */
ListView actualListView = mPullRefreshListView.getRefreshableView();
actualListView.setAdapter(adapter);
actualListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
/** 如果第一条看得见 就下拉刷新 */
if (firstVisibleItem == 0) {
ishead = true;
} else {
ishead = false;
}
}
});
}
private void addData() {
if (current_head_index >= 1) {
if (ishead) {
int tempIndex = current_head_index * 10;
for (int i = tempIndex; i > tempIndex - 10; i--) {
data.add(0, i + "");
}
current_head_index--;
} else {
int tempIndex = current_foot_index * 10;
for (int i = tempIndex - 10; i < tempIndex; i++) {
data.add(i + "");
}
current_foot_index++;
}
}
}
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
// TODO Auto-generated method stub
new MyThread().start();
}
private class MyThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
sleep(3000);
/** 让主线程更新UI */
Message msg = handler.obtainMessage();
handler.sendMessage(msg);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
/** 更新数据 */
addData();
adapter.notifyDataSetChanged();
mPullRefreshListView.onRefreshComplete();
}
}
}
记得以下几个点:
1.用一个变量来标志请求数据是上拉还是下拉(在listView的setOnScrollListener() 的监听器中来监听是下拉还是上拉,如果第一条看见了,肯定下拉,前提是第一次的条目要很多,使得第一条会滚出屏幕!!!)
2.上拉的话,数据记得加在0处,下拉就直接加在后面了
3.差点忘记了,那个ListView 是这样得到的
ListView actualListView = mPullRefreshListView.getRefreshableView();
4.记得
adapter.notifyDataSetChanged();
mPullRefreshListView.onRefreshComplete();
项目和支持库下载地址:
http://download.csdn.net/detail/yymonkeydo/8121035
listView代码中配置:
//滚动条的宽度
istView.setScrollBarSize(3);
//滚动条的背景图片为空
listView.setDivider(null);
//条目之间的距离
listView.setDividerHeight(10);
MFC对话框处理滚动条flyfish头文件//成员变量 //在资源视图中看到的对话框的大小 CRect m_rectOriginal; // 鼠标拖拽 BOOL m_bDragging; CPoint m_ptDragPoint; // 滚动条实际位置 int m_nScrollPos; // 对话框实际高度 i_对话框 onmousewheel
find有三个参数前两个参数都是迭代器,咱们的查找范围也就是两个迭代器之间,第三个参数是要查找的数据,如果查找的是自定义的数据类型的话,那咱们还要对==进行重载,重载的格式为:bool operator ==(参数){函数体}find_if也有三个参数前两个参数都是迭代器,咱们的查找范围也就是两个迭代器之间,第三个是要查找的条件,比如数据元素要大于多少,参数的体现为函数名,bool mycompare(int a) {if (a > 5)return true;else{r
1.xml:是一种可扩展的标记语言,它也是由标签组成,不同的是它的标签名可以自定义.后缀名:.xml.2.xml作用:用来传输和存储数据。用来作为配置文件;用来跨平台进行数据交换格式.用来作为持久文件存数据.注意:xml和html都是标记语言,由标签组成.html专门作为前端页面展示,xml用来 作后台数据传输和存储.3.xml的组成(了解)3.1:xml标签规范:3.1.1:..._dom4j解析xml中的括号
IDEA不显示git版本控制以及vcs的配置1 进入idea的preferences(setting)2 然后找到版本控制(version controller),如果上面一个git配置都没有,那肯定是不会有git提交的那几个按钮3 然后找到project,选择版本控制为git,如果有多个版本控制,在新建一个选其他就可以了 也可以设置这些版本控制..._idea没有vcs选项
请求响应流程设置连接参数的方法setAllowUserInteractionsetDoInputsetDoOutputsetIfModifiedSincesetUseCachessetDefaultAllowUserInteractionsetDefaultUseCaches设置请求头或响应头HTTP请求允许一个key
阅读本文大概需要 3 分钟。来源:UCloud云计算熟悉Kubernetes的程序员,都是最帅的人吧。在资源编排的宇宙里,有哪些秘密可以探索呢?这里以漫画的形式整理一份K...
题目描述石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一 样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。蜥蜴人:《星际迷航》中的反面角色。这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。现在,小 A和小 B尝试玩这种升级版的猜拳游戏。已知他们的出拳都是有周期性规律的,但周期长度不一定相等。例如:如果小A以“石头-布-石头-剪刀-蜥蜴_两人进行剪刀石头布真值表
今天是我到西永重庆电子工程职业学院大学生IT培训机构参加培训的第一天,心里还是比较乐滋滋的,暑假就捐给培训机构了,感觉很值得,虽然不能象在学校那样自由,但是在这里我将会学到很多的知识。 一到机构,就面临一个问题,制作好的网线用完了,需要制作网线。之前我看过一点制作网线的书籍,没有人说会或者不会,我抱着试试,实践一下的态度接收了任务。好不容易费了九牛二虎之力接好两个水晶头,_尝试制作一根网线
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文转自 | 深度学习与计算机视觉这是一篇在知乎获得150多万阅读量的话题,先看看具体问题,你是否..._27岁研究生毕业感觉没长大
写的不知道好不好,有什么不对的地方还请指出,谢了。1、本节基于DS18B20 1总线通讯。DS18B20温度转换很慢,初始化复位也慢,读取它的温度不需要那么频繁,可按照需要修改。2、驱动DS18B20,代码3个:初始化DS18B20、写1字节、读1字节。3、在《51单片机——DS18B20温度传感器-1总线通讯1.0》章节上做代码优化了,主要解决了小数转换及显示问题。4、温度读取出来后用数码管来显示小数,上章节数码管显示小数有精度问题,本次直接优化OK,只是12位精度显示的时候最后面那位老是_温度传感器连接到同一总线
本着好东西共享给大家的原则,在这里本人将以连载的形式把两款热销于魔兽世界的内挂——“魔兽好用”“魔兽超人”“魔兽魔方”开源。仅供大家学习和交流之用。虽然这些资料能让不懂外挂的朋友了解一些外挂的知识,能让热衷于外挂的朋友们找到一些思路和方法的借鉴,能给做游戏开发、游戏安全的朋友们更多的反外挂的线索从而把游戏做得更安全、更好;但我公开这些资料的主要目的是:希望所有热衷于网络游戏的朋友们能正确认识游戏..._魔兽世界sf用的挂
在mavem目录bin目录下找到mvn.cmd文件使用记事本打开在文件第一行输入set JAVA_HOME=D:\Java\jdk1.8.0_101(此处为你的Jdk所在)