您的位置:首页 > 其它

开源项目PullToRefresh详解(三)——PullToRefreshScrollView

2017-12-13 11:14 501 查看
和前几篇文章一样,这里还是先设置布局文件,然后找到这个控件。只不过这里要简单很多。

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来完成多种操作了,设计十分精妙!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: