和前几篇文章一样,这里还是先设置布局文件,然后找到这个控件。只不过这里要简单很多。
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来完成多种操作了,设计十分精妙!