标签:
这两天在做一个功能,需要用到“下拉刷新和上拉加载更多”这样的功能,开始的时候以为都是自己用控件加以控件来完成的,后来,在网上找了好长时间,发现直接可以用别人的现在的 library . 引用别人的library后直接就可以用的,只是注意一些细节就可以了。 我用的是pull to refresh (很多人都说这个比较好点)。然后,在刷新事件中的onRefresh中来判断用户的操作是上拉还是下拉。 如下代码 :public boolean isHeaderShown() { return getHeaderLayout().isShown(); } public boolean isFooterShown() { return getFooterLayout().isShown(); }
if (refreshView.isHeaderShown()) {
Log.i("", "下拉刷新... ");
} else { Log.i("", "上拉加载更多... "); }
// 下拉刷新时的提示文本设置 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("放开以加载");
XML布局文件: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; @Override protected 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>() { @Override public 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[]> { @Override protected String[] doInBackground(Void... params) { // Simulates a background job. try { Thread.sleep(4000); } catch (InterruptedException e) { } return mStrings; } @Override protected 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[]> { @Override protected String[] doInBackground(Void... params) { // Simulates a background job. try { Thread.sleep(4000); } catch (InterruptedException e) { } return mStrings; } @Override protected 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); } } }
<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>
android 下拉刷新/上拉加载更多【pull-to-refresh】
标签:
原文地址:http://blog.csdn.net/yyt602037504/article/details/44036571