Android ListView下拉刷新上拉加载
2017-03-11 11:54
225 查看
把这两天的心得记录下来,以后用到不会忘。
先说下拉刷新,下拉刷新我们主要用到了android自带v4jar包中的一个控件SwipeRefreshLayout,如果下面是xml文件, 如果你在写报错的话,换一个最新的v4包就可以了。
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ListView
android:id="@+id/list_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView>
</android.support.v4.widget.SwipeRefreshLayout>布局文件写好之后就是代码这一块了
上拉加载更多我们要实现一个接口OnScrollListener,这个接口主要有两个方法onScroll和onScrollStateChanged,onScroll主要是用来查看当前屏幕的item个数、位置等,onScrollStateChanged主要用来监听当前ListView处于静止、滑动、惯性的状态。一会代码有详细的注释。
首先要一个上拉加载时的一个布局文件 <ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正在加载..."/>代码这块主要注意的就是addFooterView和removeFooterView的时机,下边是上拉加载和下拉刷新的全部代码
public class MainActivity extends Activity implements OnScrollListener{
private SwipeRefreshLayout swipeRefreshLayout;
private ListView listview;
private View footer;
private List<String> list;
private ArrayAdapter adapter;
private int visibleItem;
//当前是否处于上拉加载中
private boolean isUpdateData = false;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0x100:
listview.removeFooterView(footer);
list.addAll(Arrays.asList("大明","大花","大红","大绿","大白","大刚"));
adapter.notifyDataSetChanged();
isUpdateData = false;
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
infoView();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
/**
* firstVisibleItem 表示在当前屏幕显示的第一个listItem在整个listView里面的位置(下标从0开始)
* visibleItemCount表示在现时屏幕可以见到的ListItem(部分显示的ListItem也算)总数
* totalItemCount表示ListView的ListItem总数
* listView.getLastVisiblePosition()表示在现时屏幕最后一个ListItem
* (最后ListItem要完全显示出来才算)在整个ListView的位置(下标从0开始)
*/
visibleItem = firstVisibleItem + visibleItemCount;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (adapter.getCount() == visibleItem && scrollState == SCROLL_STATE_IDLE) {
/**
*scrollState有三种状态,分别是SCROLL_STATE_IDLE、SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING
*SCROLL_STATE_IDLE是当屏幕停止滚动时
*SCROLL_STATE_TOUCH_SCROLL是当用户在以触屏方式滚动屏幕并且手指仍然还在屏幕上时(The user is scrolling using touch, and their finger is still on the screen)
*SCROLL_STATE_FLING是当用户由于之前划动屏幕并抬起手指,屏幕产生惯性滑动时(The user had previously been scrolling using touch and had performed a fling)
*/
if (!isUpdateData) {
listview.addFooterView(footer);
handler.sendEmptyMessageDelayed(0x100, 5000);
isUpdateData = true;
}
}
}
private void infoView() {
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe);
listview = (ListView) findViewById(R.id.list_view);
footer = getLayoutInflater().inflate(R.layout.menu_layout, null);
listview.setOnScrollListener(this);
list = new ArrayList<String>();
list.addAll(Arrays.asList("小明","小花","小红","小绿","小白","小刚","小小"));
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
listview.setAdapter(adapter);
swipeRefreshLayout.setColorScheme(android.R.color.background_dark, android.R.color.background_light, android.R.color.black, android.R.color.darker_gray);
swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() {
list.clear();
list.addAll(Arrays.asList("小明","小花","小红","小绿","小白","小刚","小小"));
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
}
});
}
}希望对你起到作用吧
先说下拉刷新,下拉刷新我们主要用到了android自带v4jar包中的一个控件SwipeRefreshLayout,如果下面是xml文件, 如果你在写报错的话,换一个最新的v4包就可以了。
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ListView
android:id="@+id/list_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView>
</android.support.v4.widget.SwipeRefreshLayout>布局文件写好之后就是代码这一块了
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe); swipeRefreshLayout.setColorScheme(android.R.color.background_dark, android.R.color.background_light, android.R.color.black, android.R.color.darker_gray); swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { list.clear(); list.addAll(Arrays.asList("小明","小花","小红","小绿","小白","小刚","小小")); adapter.notifyDataSetChanged(); swipeRefreshLayout.setRefreshing(false); } });下拉主要就是在这个onRefresh中实现你的数据请求,其中swipeRefreshLayout.setRefreshing(false);这句话是表示停止list上边的刷新条,也就是停止刷新。下拉刷新就是这些,接下来我们来看上拉加载更多。
上拉加载更多我们要实现一个接口OnScrollListener,这个接口主要有两个方法onScroll和onScrollStateChanged,onScroll主要是用来查看当前屏幕的item个数、位置等,onScrollStateChanged主要用来监听当前ListView处于静止、滑动、惯性的状态。一会代码有详细的注释。
首先要一个上拉加载时的一个布局文件 <ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正在加载..."/>代码这块主要注意的就是addFooterView和removeFooterView的时机,下边是上拉加载和下拉刷新的全部代码
public class MainActivity extends Activity implements OnScrollListener{
private SwipeRefreshLayout swipeRefreshLayout;
private ListView listview;
private View footer;
private List<String> list;
private ArrayAdapter adapter;
private int visibleItem;
//当前是否处于上拉加载中
private boolean isUpdateData = false;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0x100:
listview.removeFooterView(footer);
list.addAll(Arrays.asList("大明","大花","大红","大绿","大白","大刚"));
adapter.notifyDataSetChanged();
isUpdateData = false;
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
infoView();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
/**
* firstVisibleItem 表示在当前屏幕显示的第一个listItem在整个listView里面的位置(下标从0开始)
* visibleItemCount表示在现时屏幕可以见到的ListItem(部分显示的ListItem也算)总数
* totalItemCount表示ListView的ListItem总数
* listView.getLastVisiblePosition()表示在现时屏幕最后一个ListItem
* (最后ListItem要完全显示出来才算)在整个ListView的位置(下标从0开始)
*/
visibleItem = firstVisibleItem + visibleItemCount;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (adapter.getCount() == visibleItem && scrollState == SCROLL_STATE_IDLE) {
/**
*scrollState有三种状态,分别是SCROLL_STATE_IDLE、SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING
*SCROLL_STATE_IDLE是当屏幕停止滚动时
*SCROLL_STATE_TOUCH_SCROLL是当用户在以触屏方式滚动屏幕并且手指仍然还在屏幕上时(The user is scrolling using touch, and their finger is still on the screen)
*SCROLL_STATE_FLING是当用户由于之前划动屏幕并抬起手指,屏幕产生惯性滑动时(The user had previously been scrolling using touch and had performed a fling)
*/
if (!isUpdateData) {
listview.addFooterView(footer);
handler.sendEmptyMessageDelayed(0x100, 5000);
isUpdateData = true;
}
}
}
private void infoView() {
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe);
listview = (ListView) findViewById(R.id.list_view);
footer = getLayoutInflater().inflate(R.layout.menu_layout, null);
listview.setOnScrollListener(this);
list = new ArrayList<String>();
list.addAll(Arrays.asList("小明","小花","小红","小绿","小白","小刚","小小"));
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
listview.setAdapter(adapter);
swipeRefreshLayout.setColorScheme(android.R.color.background_dark, android.R.color.background_light, android.R.color.black, android.R.color.darker_gray);
swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() {
list.clear();
list.addAll(Arrays.asList("小明","小花","小红","小绿","小白","小刚","小小"));
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
}
});
}
}希望对你起到作用吧
相关文章推荐
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- Android ListView 下拉刷新 点击加载更多
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
- Android第二十三期 - 256k的ListView下拉刷新和滚动加载数据
- Android之实现ListView的“下拉刷新”、“上拉加载”、“自动加载”功能(二)
- Android ListView下拉刷新点击加载更多 推荐
- Android ListView下拉刷新上拉加载更多的实现
- Android之实现ListView的“下拉刷新”、“上拉加载”、“自动加载”功能(一)
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView
- Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android打造(ListView、GridView等)通用的下拉刷新、上拉自动加载的组件
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android listview 下拉刷新以及加载更多
- Android自定义PullListView下拉刷新,上拉加载更多分页数据
- 【转android】(ListView、GridView等)通用的下拉刷新、上拉自动加载的组件