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

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>布局文件写好之后就是代码这一块了
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);
}
});
}

}希望对你起到作用吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐