ListView有很多用处,其中更加数据、增加数据就是很明显的。可以参考微信朋友圈,上拉加载、下拉刷新。
我们在xml中增加了id为listView的ListView控件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.test.MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
其次是我们MainActivity.java的编写
import android.app.Activity;
import android.os.Bundle;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends Activity {
private ListView listView; // 获取listView
private ArrayList<String> arrayList; // 存储数据
private ArrayAdapter<String> arrayAdapter; // 适配器
private int time; // 记录加载次数
private int count; // 设置每次加载的条数
private MyOnScrollListener myOnScrollListener; // 监听ListView滑动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
// 初始化
public void init() {
arrayList = new ArrayList<>();
count = 20;
time = 1;
for (int i = 0; i < time * count; i++)
arrayList.add("初始化list" + i);
listView = (ListView) this.findViewById(R.id.listView);
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, arrayList);
listView.setAdapter(arrayAdapter);
myOnScrollListener = new MyOnScrollListener();
listView.setOnScrollListener(myOnScrollListener);
}
// 增加count条记录
public void add() {
time++;
arrayList.clear();
for (int i = 0; i < time * count; i++)
arrayList.add("增加list" + i);
arrayAdapter.notifyDataSetChanged();
}
// 更新数据
public void update() {
arrayAdapter.clear();
for (int i = 0; i < time * count; i++)
arrayList.add("更新list" + i);
arrayAdapter.notifyDataSetChanged();
}
// 监听事件,监听ListView的滑动
class MyOnScrollListener implements AbsListView.OnScrollListener {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// 当不滚动时
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
// 判断是否滚动到底部
if (view.getLastVisiblePosition() == view.getCount() - 1) {
add();
}
// 判断是否滚到最顶部
else if(view.getFirstVisiblePosition() == 0) {
update();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
}
}
鉴于代码已经有详细的注释了,就不解释了。主要还是OnScrollListener 监听ListView的使用。