android SwipeRefreshLayout 实现 下拉刷新 上拉加载
来源:互联网 发布:零基础学算法进制 编辑:程序博客网 时间:2024/05/21 22:53
上图
没有什么注释 没有demo 但是 思路清晰 好好理解看一下
xml
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/swipe_refresh_widget" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.jsu.whr.recyclerview.Main3Activity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycle_view" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView></android.support.v4.widget.SwipeRefreshLayout>
主activity
package com.jsu.whr.recyclerview;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import com.jsu.whr.myapplication.R;import java.util.ArrayList;import java.util.List;public class Main3Activity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener { SwipeRefreshLayout mSwipeRefreshLayout; RecyclerView mRecyclerView; MyAdapter adapter; List<String> list = new ArrayList<String>(); LinearLayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); mSwipeRefreshLayout = (SwipeRefreshLayout) this.findViewById(R.id.swipe_refresh_widget); mSwipeRefreshLayout.setColorSchemeResources( R.color.black, R.color.read, R.color.green, R.color.blue); mSwipeRefreshLayout.setOnRefreshListener(this);//下拉监听 mRecyclerView = (RecyclerView) this.findViewById(R.id.recycle_view); mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setOnScrollListener(mOnScrollListener); adapter = new MyAdapter(this); mRecyclerView.setAdapter(adapter); } private RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() { private int lastVisibleItem;//窗体可见最后一个item @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE//滑动状态 SCROLL_STATE_IDLE表示停止 && lastVisibleItem + 1 == adapter.getItemCount() && adapter.isShowFooter()) {//条件表示 滑到最底端了 //加载更多 handler.postDelayed(new Runnable() { @Override public void run() { list.addAll(loadNewData()); adapter.notifyDataSetChanged(); } },1000); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = mLayoutManager.findLastVisibleItemPosition(); } }; @Override public void onRefresh() { handler.postDelayed(new Runnable() { @Override public void run() { if(list!=null){ list.clear(); } list.addAll(loadData()); adapter.setDatalist(list); mSwipeRefreshLayout.setRefreshing(false); } },4000); } public List<String> loadData(){ List<String> listdata = new ArrayList<String>(); for(int i=0;i<20;i++){ list.add("---->"+i); } return listdata; } public List<String> loadNewData(){ List<String> listdata = new ArrayList<String>(); for(int i=0;i<20;i++){ list.add("---xin->"+i); } return listdata; } Handler handler = new Handler(){ };}adapter
package com.jsu.whr.recyclerview;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.jsu.whr.myapplication.R;import java.util.ArrayList;import java.util.List;/** * Created by k90 on 2016-09-02. */public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ ItemViewHolder mItemViewHolder; List<String>Datalist = new ArrayList<String>(); Context context; private boolean mShowFooter = true; private static final int TYPE_ITEM = 0; private static final int TYPE_FOOTER = 1; public void setDatalist(List<String> datalist) { Datalist = datalist; this.notifyDataSetChanged(); } public MyAdapter(Context context) { this.context = context; } @Override public int getItemViewType(int position) { // 最后一个item设置为footerView if(!mShowFooter) { return TYPE_ITEM; } if (position + 1 == getItemCount()) { return TYPE_FOOTER; } else { return TYPE_ITEM; } } public boolean isShowFooter() { return this.mShowFooter; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { if(viewType == TYPE_ITEM) { View view = LayoutInflater.from(context).inflate(R.layout.items, viewGroup, false); mItemViewHolder = new ItemViewHolder(view); return mItemViewHolder; } else{ View view = LayoutInflater.from(viewGroup.getContext()).inflate( R.layout.footer, null); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return new FooterViewHolder(view); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { if(viewHolder instanceof ItemViewHolder) { String s = Datalist.get(i); if (s == null) { return; } ((ItemViewHolder) viewHolder).tv.setText(s); } } @Override public int getItemCount() { return Datalist.size(); } public class FooterViewHolder extends RecyclerView.ViewHolder { public FooterViewHolder(View view) { super(view); } } public void isShowFooter(boolean showFooter) { this.mShowFooter = showFooter; } class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ TextView tv; public ItemViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); tv.setOnClickListener(this); } @Override public void onClick(View v) { if(mOnItemClickListtenet!=null){ mOnItemClickListtenet.onItemClick(v,this.getPosition()); } } } OnItemClickListtenet mOnItemClickListtenet; public interface OnItemClickListtenet{ void onItemClick(View v ,int position); } public void setmOnItemClickListtenet(OnItemClickListtenet mOnItemClickListtenet) { this.mOnItemClickListtenet = mOnItemClickListtenet; }}
底部layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/load_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" android:paddingBottom="12dip" android:paddingTop="12dip" > <ProgressBar style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/more_data_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:layout_marginLeft="10dp" android:text="正在加载..." /></LinearLayout>
0 0
- android SwipeRefreshLayout 实现 下拉刷新 上拉加载
- android SwipeRefreshLayout 实现 下拉刷新 上拉加载
- Android控件SwipeRefreshLayout实现下拉刷新上拉加载
- Android swiperefreshlayout 实现上拉刷新 加载
- Android SwipeRefreshLayout实现下拉刷新,上拉加载、滑动加载(自动加载)和点击加载
- SwipeRefreshLayout实现下拉刷新、上拉加载更多功能
- 使用SwipeRefreshLayout实现下拉刷新与上拉加载更多
- SwipeRefreshLayout+ListView实现下拉刷新自定义上拉加载
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- SwipeRefreshLayout + RecyclerView实现上拉加载和下拉刷新
- recyclerview+swiperefreshlayout实现GridView下拉刷新,上拉加载更多
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- SwipeRefreshLayout配合RecyclerView实现上拉加载更多下拉刷新
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉加载功能
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉加载更多
- 继承SwipeRefreshLayout实现下拉刷新和上拉加载
- 使用SwipeRefreshLayout实现recycleview下拉刷新上拉加载
- 通过SwipeRefreshLayout实现ListView的上拉加载下拉刷新
- 130道C#面试题
- 在 Ubuntu 16.04 上安装 LEMP 环境之图文向导
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
- 数据挖掘之分类
- 20160902:论文学习第四周+骁龙800/Gem5-gpu
- android SwipeRefreshLayout 实现 下拉刷新 上拉加载
- 3操作符-Java编程思想
- ListView网络加载终极优化
- Linux无处不在 它是如何毁了微软统治世界的计划?
- Association Mappings between Entities
- 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析
- C#入门11.4——预定义异常类(1)
- UML的初相识
- MIT 6.00 1x Lecture 4 - Functions 学习笔记