开源项目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 这个项目主要是提供了一个多选适配器,使用者可以用它来替换传统的适配器,用途还算比较广泛 ...
随机推荐
- asserts文件存到外部SD卡里
package com.example.wang.testapp3; import android.content.res.AssetManager; import android.graphics. ...
- THUSC 2018 酱油记
THUSC 2018 酱油记 游记分类:游记 Day \((-inf,-2]\) 自CTSC和APIO挂烂以后,仍然在停课集训,不过好像这两波考试让我的RP涨了一大波,因此模拟赛大多都考的不错,虽然经 ...
- webstorm减少内存占用
首先,按照我说的设置之后要重启才行. 在项目里找到不需要监听的文件夹右键:Mark Directory As => Cancel Exclusion 然后重启,嘿嘿,成功了!
- Hive的安装和使用
1.Hive1.1 在hadoop生态圈中属于数据仓库的角色.他能够管理hadoop中的数据,同时可以查询hadoop中的数据. 本质上讲,hive是一个SQL解析引擎.Hive可以把SQL查询转换为 ...
- cos,sina,tan,cot
这些都是三角形的公式. 三角形总之就是一个直角两个锐角. cos就是余弦定理,就是锐角的邻边除以三角形的斜边. sin就是正弦定理,就是锐角的对边除以三角形的斜边. tan就是正切定理,就是锐角的对边 ...
- 按行拆分文本文件与合并文本文件---I/O流---java
背景 在进行自然语言处理的中文词性标注时 进行测试时由于测试数据文本行数较多 而且测试每次标注一行的用时稍长 如果一次将文件读进来测试机器运行时间要连续不能中断 而且 只能一台机器进行工作 于 ...
- MATLAB遍历文件夹下所有文件
先给出函数 function [ files ] = scanDir( root_dir ) files={}; if root_dir(end)~='/' root_dir=[root_dir,'/ ...
- 在多线程中使用spring的bean
由于spring在java开发中的广泛运用大大的方便了开发的同时,当运用一些技术比如多线程等 在由spring管理的配置文件中,可以通过封装spring提供工具,手动获得spring管理的bean,这 ...
- Linux上挂载NTFS分区
1. 简介 本文的目的是提供读者在Linux操作系统上如何mount NTFS分区的文件系统的step-by-step指南.本文包括两个部分: 以只读方式mount NTFS文件系统: 以读写方式 ...
- Java并发(十八):阻塞队列BlockingQueue
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列. 这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用. 阻塞队列常用于生产 ...