[Android]ListView下拉刷新,上拉加载更多
2017-09-18 10:30
405 查看
package com.bjym.testdemo; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; public class ListAdapter extends BaseAdapter { Context m_Context; List<String> m_List; public ListAdapter(Context context, List<String> List) { super(); this.m_Context = context; m_List = List; } public void setData(List<String> List) { m_List = List; notifyDataSetChanged(); } public int getCount() { return m_List.size(); } public Object getItem(int position) { return m_List.get(position); } public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); LayoutInflater inflater = LayoutInflater.from(m_Context); convertView = inflater.inflate(R.layout.item_list, null); holder.app_icon_iv = (ImageView) convertView.findViewById(R.id.app_icon_iv); holder.text_tv01 = (TextView) convertView.findViewById(R.id.item_app_list_tv01); holder.text_tv02 = (TextView) convertView.findViewById(R.id.item_app_list_tv02); holder.line_iv = (ImageView) convertView.findViewById(R.id.line_iv); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (position == m_List.size() - 1) { holder.line_iv.setVisibility(View.GONE); } else { holder.line_iv.setVisibility(View.VISIBLE); } return convertView; } class ViewHolder { public ImageView app_icon_iv; public TextView text_tv01; public TextView text_tv02; public ImageView line_iv; } }
package com.bjym.testdemo; import android.app.Activity; import android.os.Bundle; import android.os.Looper; import android.os.Message; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.widget.AbsListView; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { SwipeRefreshLayout m_SwipeRefreshLayout; private MainHandler m_MainHandler; int m_nLast = 0; int m_nTotalItemCount = 0; public View m_LoadmoreView; public boolean m_IsLoading = false; //表示是否正处于加载状态 ListAdapter m_ListAdapter; List<String> m_Lists; class MainHandler extends android.os.Handler { public MainHandler(Looper looper) { super(looper); } public void handleMessage(Message msg) { switch (msg.what) { case 0x01: if (m_SwipeRefreshLayout.isRefreshing()) { m_SwipeRefreshLayout.setRefreshing(false);//设置不刷新 } break; case 0x02: System.out.println("size = " + m_Lists.size()); m_ListAdapter.setData(m_Lists); m_LoadmoreView.setVisibility(View.GONE); m_IsLoading = false; break; } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // No Titlebar this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); m_MainHandler = new MainHandler(getMainLooper()); m_SwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.main_srl); m_SwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); m_SwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); } catch (Exception e) { e.printStackTrace(); } Message msg = m_MainHandler.obtainMessage(0x01); m_MainHandler.sendMessage(msg); } }).start(); } }); ListView lv = (ListView) findViewById(R.id.main_lv); m_LoadmoreView = LayoutInflater.from(MainActivity.this).inflate(R.layout.load_more, null);//获得刷新视图 m_LoadmoreView.setVisibility(View.GONE);//设置刷新视图默认情况下是不可见的 lv.addFooterView(m_LoadmoreView); m_Lists = new ArrayList<String>(); for (int i = 0; i < 20; i++) { m_Lists.add(i + ""); } m_ListAdapter = new ListAdapter(MainActivity.this, m_Lists); lv.setAdapter(m_ListAdapter); lv.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (m_nLast == m_nTotalItemCount && (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE)) { //表示此时需要显示刷新视图界面进行新数据的加载(要等滑动停止) if(!m_IsLoading) { System.out.println("加载更多"); //不处于加载状态的话对其进行加载 m_IsLoading = true; //设置刷新界面可见 m_LoadmoreView.setVisibility(View.VISIBLE); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } for (int i = 0; i < 20; i++) { m_Lists.add(i + ""); } Message msg = m_MainHandler.obtainMessage(0x02); m_MainHandler.sendMessage(msg); } }).start(); } } switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: // 停止滑动 System.out.println("停止滑动"); break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: // 手指滚动 System.out.println("手指滚动"); break; case AbsListView.OnScrollListener.SCROLL_STATE_FLING: // 由于手指滚动(手离开屏幕后)产生的惯性滚动 System.out.println("由于手指滚动(手离开屏幕后)产生的惯性滚动"); break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { System.out.println("firstVisibleItem = " + firstVisibleItem); System.out.println("visibleItemCount = " + visibleItemCount); System.out.println("totalItemCount = " + totalItemCount); m_nLast = firstVisibleItem + visibleItemCount; m_nTotalItemCount = totalItemCount; } }); } }
<?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"> <FrameLayout android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="75" android:background="#9E62E1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="测试" android:textColor="@android:color/white" android:textSize="18sp" /> </FrameLayout> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/main_srl" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="925"> <ListView android:id="@+id/main_lv" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:cacheColorHint="#00000000" android:divider="@null" android:fadingEdge="none"> </ListView> </android.support.v4.widget.SwipeRefreshLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/list_selector" android:gravity="center_vertical" android:minHeight="67dp" android:orientation="horizontal"> <ImageView android:id="@+id/app_icon_iv" android:layout_width="50dip" android:layout_height="50dip" android:layout_gravity="center_vertical" android:layout_marginLeft="14dip" android:background="@drawable/cpr_recovery_xiaolong_app_icon" android:scaleType="fitXY"/> <TextView android:id="@+id/item_app_list_tv01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="18dip" android:layout_marginLeft="68dip" android:textColor="#333333" android:textSize="14sp" android:text="文章主题"/> <TextView android:id="@+id/item_app_list_tv02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="40dip" android:layout_marginLeft="68dip" android:layout_marginBottom="13dp" android:textColor="#999999" android:textSize="12sp" android:text="文章内容"/> <ImageView android:id="@+id/line_iv" android:layout_width="match_parent" android:layout_height="1dip" android:layout_gravity="bottom" android:layout_marginLeft="68dip" android:scaleType="fitXY" android:src="@color/tlt_line" /> </FrameLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/loadmore" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > <ProgressBar android:id="@+id/progress" style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:layout_marginTop="30dp" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text="正在加载..." android:textColor="#FF0000" /> </LinearLayout>
相关文章推荐
- android ListView下拉刷新上拉加载更多
- Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
- android 仿google play效果,ListView/GridView下拉刷新,上拉加载更多,自动加载异步请求数据以及分页数据
- Android仿XListView支持下拉刷新和上划加载更多的自定义RecyclerView
- 【Android归纳】基于XListView的下拉刷新、上拉加载更多的控件分析
- Android scrollview中嵌套listview实现listview的下拉刷新上拉加载更多
- Android_支持下拉刷新和加载更多的ExpandableListView
- Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)
- Android ListView 下拉刷新 点击加载更多
- Android XListView下拉刷新和上拉加载更多
- Android自定义控件(二) 下拉刷新,上拉分页加载更多(支持ListView, GridView, ScrollView)
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- Android XListView下拉刷新和上拉加载更多
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- Android ListView下拉刷新上拉加载更多的实现
- Android中Listview下拉刷新和上拉加载更多的多种实现方案
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展