zoukankan      html  css  js  c++  java
  • 开源项目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来完成多种操作了,设计十分精妙!

  • 相关阅读:
    商人的诀窍 结构体
    商人的诀窍 结构体
    小泉的难题 结构体
    小泉的难题 结构体
    来淄博旅游 结构体
    来淄博旅游 结构体
    分类游戏 结构体
    7月20日学习
    7月19日学习
    7月18日学习
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4024094.html
Copyright © 2011-2022 走看看