ListView下拉刷新SwipeRefreshLayout + 底部加载
来源:互联网 发布:seo整站优化效果 编辑:程序博客网 时间:2024/05/01 22:00
1下拉刷新可以调用google官网定义的下拉控件SwipeRefreshLayout。
1.第一步 添加布局
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/id_swipe_ly" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/two_a_list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:divider="@color/hui_f1" android:dividerHeight="10dp"></ListView> </android.support.v4.widget.SwipeRefreshLayout>
2.实现接口 与 实现方法
implements SwipeRefreshLayout.OnRefreshListener @Override public void onRefresh() { mHandler.sendEmptyMessageDelayed(0x11, 1000); }
3.声明对象
private SwipeRefreshLayout mSwipeLayout;
- 4.
mSwipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.id_swipe_ly); mSwipeLayout.setOnRefreshListener(this); mSwipeLayout.setColorSchemeColors(Color.RED, Color.RED);
5 在listview中需要控制位在顶部刷新
list.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem == 0) {//到顶部了 mSwipeLayout.setEnabled(true); two_list_foot_view_rel_layout.setVisibility(View.GONE); } else if (visibleItemCount + firstVisibleItem == totalItemCount) { //到底部了 mSwipeLayout.setEnabled(false); mHandler.sendEmptyMessageDelayed(0x12, 1000);//handler发送消息消息 自动刷新 } else {//在中间 mSwipeLayout.setEnabled(false); } } }); }
2 底部加载
原理: 给listview 添加FooterView 可设置为隐藏 可以通过list.setOnScrollListener方法知道listView已在底部,显示FooterView 并执行加载,加载成功后获得新数据与原有数据进行拼接 更新adapter 隐藏FooterView
1.添加FooterView
View footView = LayoutInflater.from(getActivity()).inflate(R.layout.two_list_foot_layout,null); two_a_list.addFooterView(footView);
2 list.setOnScrollListener
list.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem == 0) {//到顶部了 mSwipeLayout.setEnabled(true); two_list_foot_view_rel_layout.setVisibility(View.GONE); } else if (visibleItemCount + firstVisibleItem == totalItemCount) { //到底部了 mSwipeLayout.setEnabled(false); mHandler.sendEmptyMessageDelayed(0x12, 1000);//handler发送消息消息 自动刷新 } else {//在中间 mSwipeLayout.setEnabled(false); } } }); }// handler处接收消息private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0x11: adapter.notifyDataSetChanged(); mSwipeLayout.setRefreshing(false); ToastUtil.showToast(getActivity(),"已刷新"); break; case 0x12: two_list_foot_view_rel_layout.setVisibility(View.GONE); ToastUtil.showToast(getActivity(),"加载更多"); break; } }
3 数据拼接
原理 判断是否为第一次加载adapter 如果是这 new adapter 如果是底部加载获得的新数据这进行拼接 更新
DongtaiBeans dongtaiBeans = new DongtaiBeans(jsonObject); // 解析json 获得javaBean pageNum = Integer.valueOf(dongtaiBeans.getPage()); // 获取总过页数 通过此判断是否加载 if (mRefreshHeadFlag) { adapter = null; // adapter是否为空 } if (adapter == null) { // adapter为空 new adapter detailInfos = dongtaiBeans.getZxdtlist(); adapter = new DongtaiListAdapter(detailInfos); listView.setAdapter(adapter); // 设置adapter } else { // adapter不为空 detailInfos.addAll(dongtaiBeans.getZxdtlist()); // 数据源拼接数据 adapter.notifyDataSetChanged(); // 更新数据 }
3 完整代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:orientation="vertical"> <com.lpf.lpf.refresh.PullToRefreshView android:id="@+id/main_pull_refresh_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/two_a_list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:divider="@color/hui_f1" android:dividerHeight="10dp"></ListView> </com.lpf.lpf.refresh.PullToRefreshView></LinearLayout>footer 布局 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/two_list_foot_view_rel_layout" android:layout_width="match_parent" android:layout_height="40dp" android:background="#f1f1f1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="正在加载" android:textColor="#696969" android:textSize="16sp" /> </RelativeLayout></LinearLayout>package com.taisheng.xiaofang.com.taisheng.xiaofang.two;import android.graphics.Color;import android.os.Bundle;import android.os.Handler;import android.support.v4.app.Fragment;import android.support.v4.widget.SwipeRefreshLayout;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.FrameLayout.LayoutParams;import android.widget.ListView;import android.widget.RelativeLayout;import android.widget.TextView;import com.lpf.lpf.net.AsyncTaskJsonUtil;import com.lpf.lpf.net.ThreadJsonUtils;import com.lpf.lpf.refresh.PullToRefreshView;import com.lpf.lpf.utils.ToastUtil;import com.taisheng.xiaofang.R;import org.json.JSONObject;import java.util.ArrayList;import java.util.List;public class AFrag extends Fragment implements SwipeRefreshLayout.OnRefreshListener { private View view; private int mWidth; private ListView two_a_list; private List<String> list; private boolean mRefreshHeadFlag = true;// 判断是否刷新的是头部 private boolean mRefreshFlag = false;// 判断是否刷新 private int pageNum; private List<String> detailInfos; private SwipeRefreshLayout mSwipeLayout; private MyShouyeListAdapter adapter; private RelativeLayout two_list_foot_view_rel_layout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.two_a, container, false); mWidth = getResources().getDisplayMetrics().widthPixels; initView(); initData(); return view; } private void initView() { mSwipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.id_swipe_ly); mSwipeLayout.setOnRefreshListener(this); mSwipeLayout.setColorSchemeColors(Color.RED, Color.RED); two_a_list = (ListView) view.findViewById(R.id.two_a_list); two_a_list.setFocusable(false); View footView = LayoutInflater.from(getActivity()).inflate(R.layout.two_list_foot_layout,null); two_a_list.addFooterView(footView); two_list_foot_view_rel_layout = (RelativeLayout) footView.findViewById(R.id.two_list_foot_view_rel_layout); two_a_list.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem == 0) {//到顶部了 mSwipeLayout.setEnabled(true); two_list_foot_view_rel_layout.setVisibility(View.GONE); } else if (visibleItemCount + firstVisibleItem == totalItemCount) { //到底部了 mSwipeLayout.setEnabled(false); two_list_foot_view_rel_layout.setVisibility(View.VISIBLE); mHandler.sendEmptyMessageDelayed(0x12, 1000); } else {//在中间 mSwipeLayout.setEnabled(false); two_list_foot_view_rel_layout.setVisibility(View.VISIBLE); } } }); } private void initData() { list = new ArrayList<>(); String path = URLson.最新动态+"?pagenum=1"; AsyncTaskJsonUtil jsonUtil = new AsyncTaskJsonUtil(getActivity(), null, null, false, null, true, "请稍等......", new AsyncTaskJsonUtil.ResultCallBack() { @Override public void JSONResult(JSONObject jsonObject) { // TODO Auto-generated method stub DongtaiBeans dongtaiBeans = new DongtaiBeans(jsonObject); pageNum = Integer.valueOf(dongtaiBeans.getPage()); if (mRefreshHeadFlag) { adapter = null; } if (adapter == null) { detailInfos = dongtaiBeans.getZxdtlist(); adapter = new MyShouyeListAdapter(list); two_a_list.setAdapter(adapter); } else { detailInfos.addAll(dongtaiBeans.getZxdtlist()); adapter.notifyDataSetChanged(); } } }); jsonUtil.execute(path); } private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0x11: adapter.notifyDataSetChanged(); mSwipeLayout.setRefreshing(false); ToastUtil.showToast(getActivity(),"已刷新"); break; case 0x12: two_list_foot_view_rel_layout.setVisibility(View.GONE); ToastUtil.showToast(getActivity(),"加载更多"); break; } } ; }; @Override public void onRefresh() { mHandler.sendEmptyMessageDelayed(0x11, 1000); } class MyShouyeListAdapter extends BaseAdapter { List<String> list; public MyShouyeListAdapter(List<String> list) { this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup viewGroup) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(getActivity()).inflate(R.layout.two_a_list_item_layout, null); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } return convertView; } class ViewHolder { } }}
1 0
- ListView下拉刷新SwipeRefreshLayout + 底部加载
- 探索SwipeRefreshLayout配合自定义ListView完成下拉刷新、滑到底部自动加载更多
- Android SwipeRefreshLayout 包含ListView 上拉刷新 下拉加载
- SwipeRefreshLayout+ListView实现下拉刷新自定义上拉加载
- SwipeRefreshLayout加listview下拉加载,上拉刷新
- 通过SwipeRefreshLayout实现ListView的上拉加载下拉刷新
- Android listview+SwipeRefreshLayout 下拉刷新,上拉加载.
- SwipeRefreshLayout + ListView 实现仿简书 下拉刷新 与 上拉加载
- android,SwipeRefreshLayout,listview下拉刷新
- DropDownListView下拉刷新及滑动到底部加载更多ListView
- SwipeRefreshLayout实现下拉刷新,下拉加载
- Xamarin android 使用RecyclerView结合SwipeRefreshLayout下拉刷新滑到底部加载更多
- android:ListView下拉刷新上拉加载(SwipeRefreshLayout+滑动监听加载更多)
- Android控件ListView下拉刷新之SwipeRefreshLayout
- SwipeRefreshLayout组件 实现ListView下拉刷新
- SwipeRefreshLayout组件 自己实现ListView下拉刷新
- ViewPager+ListView+SwipeRefreshLayout+自定义下拉刷新
- ListView下拉刷新加载
- selenium python webdriver 操作页面的滚动条
- 虚拟机字节码执行引擎
- java运算符
- ipython notebook使用教程
- Submile Text3中的实用插件
- ListView下拉刷新SwipeRefreshLayout + 底部加载
- signal函数
- Linux动态调频系统CPUFreq之一:概述
- Elasticsearch 中文分词器 IK 配置和使用
- 错误收集
- tbox新增stackless协程支持
- Linux 下设置环境变量
- netty游戏服务器搭建之客户端
- CodeForces 742D Arpa's weak amphitheater and Mehrdad's valuable Hoses