开源项目PullToRefresh详解(三)——PullToRefreshScrollView
和前几篇文章一样,这里还是先设置布局文件,然后找到这个控件。只不过这里要简单很多。
1.布局文件
<?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="fill_parent"
android:orientation="vertical" > <!-- The PullToRefreshScrollView replaces a standard PullToRefreshScrollView widget. --> <com.handmark.pulltorefresh.library.PullToRefreshScrollView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pull_refresh_scrollview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
ptr:ptrAnimationStyle="flip"
ptr:ptrMode="both" > <TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="8dp"
android:text="@string/filler_text"
android:textSize="16sp" />
</com.handmark.pulltorefresh.library.PullToRefreshScrollView> </LinearLayout>
和ScrollView不同的是,这里不用放一个linearLayout来做内容的容器,直接放入要显示的东西就行。
2.找到控件并进行设置,这里直接贴上Activity的代码
/*******************************************************************************
* Copyright 2011, 2012 Chris Banes.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.handmark.pulltorefresh.samples; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ScrollView; import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView; public final class PullToRefreshScrollViewActivity extends Activity { PullToRefreshScrollView mPullRefreshScrollView;
ScrollView mScrollView; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ptr_scrollview);
//找到控件
mPullRefreshScrollView = (PullToRefreshScrollView) findViewById(R.id.pull_refresh_scrollview);
//设置监听器,监听器中执行异步任务
mPullRefreshScrollView.setOnRefreshListener(new OnRefreshListener<ScrollView>() { @Override
public void onRefresh(PullToRefreshBase<ScrollView> refreshView) {
new GetDataTask().execute();
}
}); mScrollView = mPullRefreshScrollView.getRefreshableView();
} private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override
protected String[] doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
}
return null;
} @Override
protected void onPostExecute(String[] result) {
// Do some stuff here // Call onRefreshComplete when the list has been refreshed.
//注意:执行完后通知控件刷新完成
mPullRefreshScrollView.onRefreshComplete(); super.onPostExecute(result);
}
} }
下面是横向的ScrollView
1.布局文件,就是几个textview
<?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="fill_parent"
android:orientation="vertical" > <!-- The PullToRefreshScrollView replaces a standard PullToRefreshScrollView widget. --> <com.handmark.pulltorefresh.library.PullToRefreshHorizontalScrollView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pull_refresh_horizontalscrollview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
ptr:ptrAnimationStyle="flip"
ptr:ptrMode="both" > <LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="horizontal" > <TextView
style="@style/HorizScrollViewItem"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#ff99cc00" /> <TextView
style="@style/HorizScrollViewItem"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#ffff4444" /> <TextView
style="@style/HorizScrollViewItem"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#ff33b5e5" /> <TextView
style="@style/HorizScrollViewItem"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#ffcc0000" /> <TextView
style="@style/HorizScrollViewItem"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#ffffbb33" /> <TextView
style="@style/HorizScrollViewItem"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#ff00ddff" /> <TextView
style="@style/HorizScrollViewItem"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#ff669900" />
</LinearLayout> </com.handmark.pulltorefresh.library.PullToRefreshHorizontalScrollView> </LinearLayout>
2.activity中的代码,和上面基本一样
/*******************************************************************************
* Copyright 2011, 2012 Chris Banes.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.handmark.pulltorefresh.samples; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.HorizontalScrollView; import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshHorizontalScrollView; public final class PullToRefreshHorizontalScrollViewActivity extends Activity { PullToRefreshHorizontalScrollView mPullRefreshScrollView;
HorizontalScrollView mScrollView; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ptr_horizontalscrollview); mPullRefreshScrollView = (PullToRefreshHorizontalScrollView) findViewById(R.id.pull_refresh_horizontalscrollview);
mPullRefreshScrollView.setOnRefreshListener(new OnRefreshListener<HorizontalScrollView>() { @Override
public void onRefresh(PullToRefreshBase<HorizontalScrollView> refreshView) {
new GetDataTask().execute();
}
}); mScrollView = mPullRefreshScrollView.getRefreshableView();
} private class GetDataTask extends AsyncTask<Void, Void, String[]> { @Override
protected String[] doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
}
return null;
} @Override
protected void onPostExecute(String[] result) {
// Do some stuff here // Call onRefreshComplete when the list has been refreshed.
mPullRefreshScrollView.onRefreshComplete(); super.onPostExecute(result);
}
} }
这里我们来注意下这部分
mPullRefreshScrollView = (PullToRefreshHorizontalScrollView) findViewById(R.id.pull_refresh_horizontalscrollview);
mPullRefreshScrollView.setOnRefreshListener(new OnRefreshListener<HorizontalScrollView>() { @Override
public void onRefresh(PullToRefreshBase<HorizontalScrollView> refreshView) {
new GetDataTask().execute();
}
});
____________________________________________________________________________________________________
mPullRefreshScrollView.setOnRefreshListener(new OnRefreshListener<ScrollView>() { @Override
public void onRefresh(PullToRefreshBase<ScrollView> refreshView) {
new GetDataTask().execute();
}
});
它设计的时候通过传入的范型来改变监听器的内容,这样就可以用一个监听器类OnRefreshListener来完成多种操作了,设计十分精妙!
开源项目PullToRefresh详解(三)——PullToRefreshScrollView的更多相关文章
- 开源项目PullToRefresh详解(二)——PullToRefreshGridView
这里介绍的是PullToRefreshGridView的使用方法,和之前的PullToRefreshListView方法如出一辙,因为这个开源项目模块化很棒,所以很容易实现.等于说我们可以按照之前使用 ...
- 开源项目PullToRefresh详解(一)——PullToRefreshListView
开源项地址:https://github.com/chrisbanes/Android-PullToRefresh 下拉刷新这个功能我们都比较常见了,今天介绍的就是这个功能的实现.我将按照这个开 ...
- 开源项目PullToRefresh详解(四)——PullToRefreshListView和ViewPager的结合使用
其实这个不是什么新东西了,在介绍(一)中我们就知道了PullToRefreshListView的用法,这里只要将其放入到ViewPager中就行啦.ViewPager还是和以往一样的定义和使用,在适配 ...
- 开源项目MultiChoiceAdapter详解(三)——MulitChoiceNormalArrayAdapter的使用
MulitChoiceNormalArrayAdapter是我自己定义的一个类,其实就是实现了MulitChoiceArrayAdapter,为什么做这个简单的实现类呢,因为这样我们在不用Action ...
- 开源项目MultiChoiceAdapter详解(六)——GridView和MultiChoiceBaseAdapter配合使用
这篇其实没啥重要的,主要就算是个总结吧. 一.布局文件 这里实现的是类似于上图的多图选择的效果.关键在于item布局文件的写法.这也就是这个框架奇葩的一点,莫名其妙的要在一个自定义控件里面再放一个自定 ...
- 开源项目MultiChoiceAdapter详解(五)——可扩展的MultiChoiceBaseAdapter
上次写到了开源项目MultiChoiceAdapter详解(四)——MultiChoiceBaseAdapter的使用,其实我们仍旧可以不使用ActionMode的,所以这里就写一个自己扩展的方法. ...
- 开源项目MultiChoiceAdapter详解(四)——MultiChoiceBaseAdapter的使用
MultiChoiceBaseAdapter是一个可以多选的BaseAdapter,使用的方式相比来说扩展性更强! 使用方式: 1.布局文件 2.写一个类继承MultiChoiceBaseAdapte ...
- 开源项目MultiChoiceAdapter详解(二)——MultiChoiceArrayAdapter的使用
MultiChoiceArrayAdapter其实就是可以多选的ArrayAdapter了,ArrayAdpter我们已经很熟悉了.MultiChoiceArrayAdapter这个类是抽象类,所以使 ...
- 开源项目MultiChoiceAdapter详解(一)——概要介绍
项目地址:https://github.com/ManuelPeinado/MultiChoiceAdapter 这个项目主要是提供了一个多选适配器,使用者可以用它来替换传统的适配器,用途还算比较广泛 ...
随机推荐
- shiro中async-supported报错 cvc-complex-type.2.4.a: Invalid content was found starting with element 'async-supported'. One of '{"http://java.sun.com/xml/ns/ javaee":init-param}' is expected.
最近都在研究shiro这个框架,今天实施了一下,就报了如下错误: cvc-complex-type.2.4.a: Invalid content was found starting with ele ...
- 开始使用KVM和QEMU
一. 简介 Quick Emulator(QEMU) 是QEMU/KVM虚拟化套件中的主要组成部分. 它提供了硬件的虚拟化和处理器的仿真. QEMU不用运行在内核,它是运行在用户空间的. QEMU支持 ...
- SOAP port
To determine the SOAP port on WebSphere Base: Server Types > WebSphere application servers > [ ...
- 模拟赛T1 素数
没有链接 描述: 给p,q,求a^2+b^2 = p*q解的个数,p,q是素数 沙雕打表结论题 然后怼了3h吼爆零 题解 首先这是个结论题 然后这是证明 代码 #include <stdio.h ...
- 【LCA+MST】BZOJ3732-Network
[题目大意] 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N.图中有M条边 (1<=M<=30,000) ,第j条边的长度:d_j (1<=d_j ...
- 15、Redis的集群
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------------------- ...
- Xtreme9.0 - Light Gremlins 容斥
Xtreme9.0 - Light Gremlins 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenge ...
- 轻量级IOC框架:Ninject (上)
前言 前段时间看Mvc最佳实践时,认识了一个轻量级的IOC框架:Ninject.通过google搜索发现它是一个开源项目,最新源代码地址是:http://github.com/enkari/ninje ...
- python之sys.stdout、sys.stdin
转自:http://www.cnblogs.com/turtle-fly/p/3280519.html 本文环境:Python 2.7 使用 print obj 而非 print(obj) sys. ...
- Anaconda、Miniconda、Conda、pip的相互关系_我是刘振岗_新浪博客
Anaconda.Miniconda.Conda.pip的相互关系_我是刘振岗_新浪博客 http://blog.sina.com.cn/s/blog_8a122dcf0102x9vn.html