SwipeRefreshLayout实现上拉下拉刷新

    xiaoxiao2026-01-20  6

    1:在布局中添加SwipeRefreshLayout和Listview组件

    [html]  view plain  copy   <?xml version="1.0" encoding="utf-8"?>   <RelativeLayout       style="@style/BaseStyle.White"       xmlns:android="http://schemas.android.com/apk/res/android">          <!--下拉刷新-->       <android.support.v4.widget.SwipeRefreshLayout           android:id="@+id/srl_refresh"           style="@style/BaseStyle">              <!--上拉更多-->           <ListView               android:id="@+id/lv_person_goods"               style="@style/BaseStyle"               android:gravity="center"               android:horizontalSpacing="@dimen/margin_standard"               android:numColumns="2"               android:scrollbarStyle="outsideOverlay"               android:verticalSpacing="@dimen/margin_standard"/>       </android.support.v4.widget.SwipeRefreshLayout>          <!--数据为空时显示的View-->       <TextView           android:id="@+id/tv_no_data"           style="@style/BaseStyle.FullWrap"           android:layout_marginTop="@dimen/textview_width_small"           android:gravity="center_horizontal"           android:text="暂无数据"           android:textColor="@color/text_title_standard"           android:textSize="@dimen/font_size_small"           android:visibility="gone"/>      </RelativeLayout>  

    2:在主页面使用

    [java]  view plain  copy   /**   * Created by pengkv on 2014/12/5.   * 我的宝贝列表页面,用于选择添加到拍卖场   */   public class MySaleGoodsListViewActivity extends VolleyActivity implements IInit, IResponseHandler, IPagination, SwipeRefreshLayout.OnRefreshListener {          private int auctionID;       private GoodsInfoViewModel mViewModel;       private TextView mEmptyTV;//空白视图       private ListView mListView;//专场列表       private PersonGoodsListAdapter mAdapter;//适配器       private SwipeRefreshLayout mSwipeRefreshLayout;//下拉刷新布局          @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.activity_me_auction_goods_list);              init();       }          @Override       public void init() {           ActionBarUtil.setup(this"我店铺的宝贝");              auctionID = getIntent().getIntExtra(EnumIntentKey.AUCTION_ID.toString(), 0);              mListView = (ListView) findViewById(R.id.lv_person_goods);           mEmptyTV = (TextView) findViewById(R.id.tv_no_data);              mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.srl_refresh);//下拉刷新组件           mSwipeRefreshLayout.setOnRefreshListener(this);//设置刷新监听器           mSwipeRefreshLayout.setColorSchemeResources(R.color.background_blue_standard, R.color.white, R.color.background_blue_standard, R.color.white);//设置下拉刷新组件的颜色              mViewModel = new GoodsInfoViewModel();           fetchData(FIRST);//得到喜欢列表数据       }          @Override       public void fetchData(int tag) {           GetGoodsListForSellParam param = new GetGoodsListForSellParam(Data.getUserID(), 1, mViewModel.getPageIndex(), Data.PAGE_SIZE_MEDIUM);           SquareApi.getGoodsListForSell(this, param, tag);       }          /**       * 更新适配器       */       @Override       protected void onRestart() {           super.onRestart();           mViewModel.reset();           fetchData(FIRST);//得到喜欢列表数据       }          @Override       public void updateUI(Object response, final int tag) {           if (response == nullreturn;              if (tag == FIRST) {               //得到喜欢列表数据               mViewModel.inflate(response);                  //通过判断喜欢列表适配器mAdapter是否为空来做分页处理               if (mAdapter == null) {                   //当适配器为空                   mSwipeRefreshLayout.setRefreshing(false);//下拉刷新组件停止刷新                      mAdapter = new PersonGoodsListAdapter(this, mViewModel.getList());                   mListView.setAdapter(mAdapter);//ListView绑定喜欢适配器                      /**                   *  上拉更多                   */                   mListView.setOnScrollListener(new AbsListView.OnScrollListener() {                       @Override                       public void onScrollStateChanged(AbsListView view, int scrollState) {                           switch (scrollState) {                               case SCROLL_STATE_IDLE:                                      if (mListView.getLastVisiblePosition() == mViewModel.getList().size() - 1) {                                       if (!mViewModel.isComplete()) {                                           fetchNewData(FIRST);                                       }                                   }                                   break;                           }                       }                          @Override                       public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {                       }                   });                      mListView.setEmptyView(mEmptyTV);//将此图片绑定到喜欢列表ListView                  } else {                   mAdapter.notifyDataSetChanged();//适配器更新数据               }                  mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {                   @Override                   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                       Intent i = new Intent();                       if (getIntent().getBooleanExtra(EnumIntentKey.IS_SELECT_LINK.toString(), false)) { // 选择发送链接                           i.putExtra(EnumIntentKey.GOODS_ID.toString(), mViewModel.getList().get(position).getGoodsID());                           i.putExtra(EnumIntentKey.GOODS_NAME.toString(), mViewModel.getList().get(position).getGoodsName());                           setResult(RESULT_OK, i);                       } else {  // 添加到专场                           i.setClass(MySaleGoodsListViewActivity.this, AddAuctionGoodsActivity.class);                           i.putExtra(EnumIntentKey.AUCTION_GOODS_ID.toString(), mViewModel.getList().get(position).getGoodsID());                           i.putExtra(EnumIntentKey.IS_DO.toString(), true);                           i.putExtra(EnumIntentKey.AUCTION_ID.toString(), auctionID);                           startActivity(i);                       }                       finish();                   }               });           }       }          @Override       public void fetchNewData(int tag) {           mViewModel.increasePageIndex();           fetchData(FIRST);//得到喜欢的拍品列表数据       }          @Override       public void onRefresh() {           mViewModel.reset();//重置页索引和完成状态           mAdapter = null;//清空适配器           fetchData(FIRST);//得到喜欢的拍品列表数据       }   }  

    解析:

    (下拉刷新)主页面需要实现SwipeRefreshLayout.OnRefreshListener接口,然后在

    [java]  view plain  copy   @Override      public void onRefresh() {      }   方法中实现更新

    (上拉更多)上拉更多需要监听setOnScrollListener()方法

    [java]  view plain  copy   mListView.setOnScrollListener(new AbsListView.OnScrollListener() {                     @Override                     public void onScrollStateChanged(AbsListView view, int scrollState) {                         switch (scrollState) {                             case SCROLL_STATE_IDLE:                                    if (mListView.getLastVisiblePosition() == mViewModel.getList().size() - 1) {                                     if (!mViewModel.isComplete()) {                                         fetchNewData(FIRST);                                     }                                 }                                 break;                         }                     }                        @Override                     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {                     }                 });   相关资源:SwipeRefreshLayout 下拉刷新上拉加载demo
    最新回复(0)