看这个之前首先可以看看前面的SimpAdapter的简单应用。
onItemClickListener
onScrollListener
我们直接看activity的处理:
package com.example.lolli.listviewdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private ListView listView; // 定义一个SimpleAdapter private SimpleAdapter simpleAdapter; List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化控件 listView = (ListView) findViewById(R.id.listView); /** * Constructor * * @param context 上下文 * @param data 数据源 (List<Map<String, Object>>) 形式 * @param resource 每一项的布局文件 * @param from 对应的布局文件中的控件id * item. * @param to resource里要放的值的控件id */ int[] layoutId = {R.id.tm_img, R.id.tm_name, R.id.tm_age}; String[] from = {"pic", "name", "age"}; simpleAdapter = new SimpleAdapter(this, creatDate(), R.layout.item, from, layoutId); listView.setAdapter(simpleAdapter); /** * 设置listView的item点击事件 */ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String itemText = listView.getItemAtPosition(position).toString(); int viewId = view.getId(); Toast.makeText(MainActivity.this, "position=" + position + " itemText=" + itemText + " viewId=" + viewId + " longID=" + id, Toast.LENGTH_LONG).show(); } }); /** * 设置list的滑动事件 */ listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState){ case SCROLL_STATE_FLING: Log.i("scroll ---- ", "用户手指离开屏幕,但list仍在滑动"); break; case SCROLL_STATE_IDLE: Log.i("scroll ---- ", "list停止滑动"); if (view.getLastVisiblePosition() == (view.getCount()-1)){ Log.i("scroll ---- ", "用户手指离开屏幕,但list仍在滑动,在最后一条数据才添加新数据"); Map<String, Object> map = new HashMap<String, Object>(); map.put("pic", R.drawable.tm); map.put("name", "测试姓名"); map.put("age", "测试年龄"); dataList.add(map); // 更新数据源后通知UI刷新 simpleAdapter.notifyDataSetChanged(); } break; case SCROLL_STATE_TOUCH_SCROLL: Log.i("scroll ---- ", "用户手在屏幕上滑动list"); break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } /** * 封装数据 * @return * 显示的数据源 */ private List<Map<String, Object>> creatDate (){ for (int i = 0; i<20; i++){ Map<String, Object> map = new HashMap<String, Object>(); map.put("pic", R.drawable.tm); map.put("name", "天明" + i); map.put("age", 18 + i); dataList.add(map); } return dataList; } }