[Android]ListView下拉刷新,上拉加载更多

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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值