if (refreshView.isHeaderShown()) {
Log.i("", "下拉刷新... ");
} else {Log.i("", "上拉加载更多... ");}
2.刷新完成后,怎样让界面恢复到正常显示数据的状态 ?
library提供了相应的方法来结束刷新: mPullRefreshListView.onRefreshComplete();
3.刷新时的提示文本怎样设置 ?
首先说一下刷新的3种情况及设置:
第一种是向下拉刷新,它的设置是: mPullRefreshListView.setMode(Mode.PULL_FROM_END);
第二种是向上拉刷新,它的设置 是: mPullRefreshListView.setMode(Mode.PULL_FROM_START);
第三种是两端刷新: 它的设置是: PullRefreshListView.setMode(Mode.BOTH);
设置刷新时的提示文本,这里主要需要注意的是getLoadingLayoutProxy(boolean b1, boolean b2),特别注意它的两个参数,相具体的理解,就动手试试就明了了。我的设置代码如下 :
// 下拉刷新时的提示文本设置mPullRefreshListView.getLoadingLayoutProxy(true, false).setLastUpdatedLabel("下拉刷新");mPullRefreshListView.getLoadingLayoutProxy(true, false).setPullLabel("");mPullRefreshListView.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在刷新");mPullRefreshListView.getLoadingLayoutProxy(true, false).setReleaseLabel("放开以刷新");// 上拉加载更多时的提示文本设置mPullRefreshListView.getLoadingLayoutProxy(false, true).setLastUpdatedLabel("上拉加载");mPullRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel("");mPullRefreshListView.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加载...");mPullRefreshListView.getLoadingLayoutProxy(false, true).setReleaseLabel("放开以加载");
4.上拉加载更多时,更新数据之后,怎样让滚动条的位置依然停在上次加载到的位置 ?
想要回去上次加载到的位置,首先要得到上次加载的位置,android为我们提供了得到当前滚动条位置的方法:
setSelectionFromTop(int position, int y) -- position 是上一次的位置(List的下标) y--是距顶部边缘的距离 (可用系统的参数 )
然后,等 到数据加载完毕后, 将滚动条的位置设置为上一次的位置即可。
用方法 :setSelectionFromTop(y, TRIM_MEMORY_BACKGROUND);
解决了上面的问题,一个简单的下拉刷新 和 上拉加载更多就出来了,下面是我的代码 :
public class MainActivity extends Activity {private LinkedList<String> mListItems;private PullToRefreshListView mPullRefreshListView;private ArrayAdapter<String> mAdapter;private String[] mStrings = { "1", "2", "3", "4" };private ListView lvShow = null;private int y = 0; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);mPullRefreshListView.setMode(Mode.BOTH);// 下拉刷新时的提示文本设置mPullRefreshListView.getLoadingLayoutProxy(true, false).setLastUpdatedLabel("下拉刷新");mPullRefreshListView.getLoadingLayoutProxy(true, false).setPullLabel("");mPullRefreshListView.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在刷新");mPullRefreshListView.getLoadingLayoutProxy(true, false).setReleaseLabel("放开以刷新");// 上拉加载更多时的提示文本设置mPullRefreshListView.getLoadingLayoutProxy(false, true).setLastUpdatedLabel("上拉加载");mPullRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel("");mPullRefreshListView.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加载...");mPullRefreshListView.getLoadingLayoutProxy(false, true).setReleaseLabel("放开以加载");// 添加 一个下拉刷新事件mPullRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() {@Overridepublic void onRefresh(PullToRefreshBase<ListView> refreshView) {if (refreshView.isHeaderShown()) {new GetHeaderDataTask().execute();} else {// 得到上一次滚动条的位置,让加载后的页面停在上一次的位置,便于用户操作y = mListItems.size();new GetBottomDataTask().execute();}}});lvShow = mPullRefreshListView.getRefreshableView();mListItems = new LinkedList<String>();mListItems.addAll(Arrays.asList(mStrings));mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mListItems);lvShow.setAdapter(mAdapter);}/* * 功能 : 下拉刷新时的事件处理 */private class GetHeaderDataTask extends AsyncTask<Void, Void, String[]> {@Overrideprotected String[] doInBackground(Void... params) {// Simulates a background job.try {Thread.sleep(4000);} catch (InterruptedException e) {}return mStrings;}@Overrideprotected void onPostExecute(String[] result) {mListItems.addFirst("-3");mListItems.addFirst("-4");mListItems.addFirst("-5");mAdapter.notifyDataSetChanged();// 停止刷新mPullRefreshListView.onRefreshComplete();super.onPostExecute(result);}}/* * 功能: 上拉加载更多时的事件处理 */private class GetBottomDataTask extends AsyncTask<Void, Void, String[]> {@Overrideprotected String[] doInBackground(Void... params) {// Simulates a background job.try {Thread.sleep(4000);} catch (InterruptedException e) {}return mStrings;}@Overrideprotected void onPostExecute(String[] result) {mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("5");mListItems.add("8");mAdapter.notifyDataSetChanged();// 停止刷新mPullRefreshListView.onRefreshComplete();// 设置滚动条的位置 -- 加载更多之后,滚动条的位置应该在上一次划到的位置lvShow.setSelectionFromTop(y, TRIM_MEMORY_BACKGROUNP);super.onPostExecute(result);}}}
XML布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pull_refresh_list" android:layout_width="fill_parent" android:layout_height="fill_parent" /></RelativeLayout>
~~~