1. 點擊事件(OnItemClickListener)
onItemClick(AdapterView<?> parent, View view, int position, long id)
parent:官方解釋為:The AdapterView where the click happened,也就是用戶所點擊的AdapterView,這個參數一般不用。
view:當前點擊的列表項所對應的布局View對象,可通過這個參數獲得相應的列表項內部的組件,進而對其進行操作。舉個例子,假設有一個ListView,含有4個列表項,你點了第2個,那么通過view你就可以操作第2個列表項里面的TextView、ImageView等等的組件(假設存在)。
position:當前點擊的列表項的位置,從0開始,也就是點擊第n個,position就是n-1。
id:當前點擊的列表項的序號,也是從0開始,一般情況下position和id是一樣的。
public class MainActivity extends Activity implements AdapterView.OnItemClickListener{
private ListView myListView;
private SimpleAdapter simpleAdapter;
private List<Map<String, Object>> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data = new ArrayList<Map<String, Object>>();
simpleAdapter = new SimpleAdapter(this, getData(), R.layout.item, new String[]{"img", "text"}, new int[]{R.id.img, R.id.text});
myListView = (ListView) findViewById(R.id.myListView);
//設置監聽器
myListView.setAdapter(simpleAdapter);
myListView.setOnItemClickListener(this);
}
private List<Map<String, Object>> getData() {
for (int i = 0; i < 20; i++) {
Map<String, Object>map = new HashMap<String, Object>();
map.put("img", R.mipmap.ic_launcher);
map.put("text", "初始simpleAdapter"+(i+1));
data.add(map);
}
return data;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//通過view獲取其內部的組件,進而進行操作
String text = (String) ((TextView)view.findViewById(R.id.text)).getText();
//大多數情況下,position和id相同,並且都從0開始
String showText = "點擊第" + position + "項,文本內容為:" + text + ",ID為:" + id;
Toast.makeText(this, showText, Toast.LENGTH_LONG).show();
}
}
2. 滾動事件(OnScrollListener)
void onScrollStateChanged(AbsListView view, int scrollState)
監聽滾動狀態的變化。
view:正在被滾動的視圖,也就是當前的ListView。
scrollState:滾動狀態,分別有以下幾種:
SCROLL_STATE_TOUCH_SCROLL
:滑動狀態,手指在視圖滑動,並且手指一直停留在屏幕上而未離開。
SCROLL_STATE_FLING
:投擲狀態,手指在離開視圖前,用力划了一下(想象將視圖投擲出去的感覺),視圖會按照慣性滑動至停止。
SCROLL_STATE_IDLE
:閑置狀態,什么都沒做的狀態。當投擲狀態或觸摸滾動狀態結束時,進入閑置狀態。
void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
監聽非滾動狀態,只要ListView不滾動,就會被不斷調用。
view:正在被滾動的視圖,也就是當前的ListView。
firstVisibleItem:已加載的第一個列表項的索引值。
visibleItemCount:已加載的列表項的總數。
totalItemCount:適配器中數據源對應的列表項總數。
public class MainActivity extends Activity implements AbsListView.OnScrollListener{
private ListView myListView;
private SimpleAdapter simpleAdapter;
private List<Map<String, Object>> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data = new ArrayList<Map<String, Object>>();
simpleAdapter = new SimpleAdapter(this, getData(), R.layout.item, new String[]{"img", "text"}, new int[]{R.id.img, R.id.text});
myListView = (ListView) findViewById(R.id.myListView);
myListView.setAdapter(simpleAdapter);
//設置監聽器
myListView.setOnScrollListener(this);
}
private List<Map<String, Object>> getData() {
for (int i = 0; i < 20; i++) {
Map<String, Object>map = new HashMap<String, Object>();
map.put("img", R.mipmap.ic_launcher);
map.put("text", "初始simpleAdapter"+(i+1));
data.add(map);
}
return data;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
//投擲狀態
case SCROLL_STATE_FLING:
Toast.makeText(this, "SCROLL_STATE_FLING", Toast.LENGTH_SHORT).show();
break;
//閑置狀態
case SCROLL_STATE_IDLE:
Toast.makeText(this, "SCROLL_STATE_IDLE", Toast.LENGTH_SHORT).show();
break;
//滑動狀態
case SCROLL_STATE_TOUCH_SCROLL:
Toast.makeText(this, "SCROLL_STATE_TOUCH_SCROLL", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// Toast.makeText(this, "滾動已停止,已加載的第一項的索引為:" + firstVisibleItem +
// ",已加載的列表項總數為:" + visibleItemCount + ",存在的列表項總數為:" +
// totalItemCount, Toast.LENGTH_LONG).show();
}
}