您的位置:首页 > 移动开发 > Android开发

[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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐