首页 > 代码库 > 开源项目PullToRefresh详解(三)——PullToRefreshScrollView

开源项目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