標籤:
代碼:
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.*;
public class MainActivity extends Activity {
private String[] names=new String[]{
"虎頭","弄玉","李清照","李白"};
private String[] descs=new String[]{
"可愛的小孩","一個擅長音樂的女孩","一個擅長文學的女性","浪漫主義詩人"
};
private int[] imageIds=new int[]{
R.drawable.tiger,R.drawable.nongyu,R.drawable.qingzhao,R.drawable.libai
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Map<String,Object>> listItems=new ArrayList<Map<String,Object>>();
/**
* 建立一個List集合,List集合中的元素是Map.List可以理解為鏈表,這個鏈表中的元素是Map類,Map是由String到Object的映射。
* arraylist是list的一種,它繼承於list,有所有list的特性,並且它不再是一個抽象類別,它的儲存方式是連續儲存,這就是他的一個實現方法。
* 還有一種linkedlist也是list的一種,它也繼承於list,它的儲存方式不是連續儲存,而是通過第i個找到第i+1個(如果有的話)。
* 當只是需要用到list的特性的時候,並不用關注它是arraylist還是linkedlist。
* 所以定義的時候是用list而new實體的時候用的arraylist,這樣是允許的。
* 只是這樣做的後果是listItems明明是ArrayList但是卻不能使用ArrayList有而list沒有的特點。
* HashMap是Map的一種,他有一個演算法使它能快速的通過key找到value。
* 可以簡單的認為list是通過下標找對象而Map是通過key找對象,
*/
for(int i=0;i<names.length;i++){
Map<String,Object> listItem=new HashMap<String,Object>();
listItem.put("header",imageIds[i]);
listItem.put("personName",names[i]);
listItem.put("desc",descs[i]);
listItems.add(listItem);
}
SimpleAdapter simpleAdapter=new SimpleAdapter(this,listItems,R.layout.simple_item,
new String[]{"personName","header","desc"},
new int[]{R.id.name,R.id.header,R.id.desc});
/**
* 建立了一個SimpleAdapter,需要五個參數:
* 第二個參數:應該是一個List<? extends Map<String,?>>類型的集合對象,該集合中的每個Map<String,?>對象產生一個清單項目
* 第三個參數:指定一個介面布局的ID,意味著使用該檔案作為清單項目組件
* 第四個參數:該參數應該是一個String[]類型的參數,決定提取Map<String,?>對象中哪些key對應的value來產生清單項目
* 第五個參數:該參數應該是一個int[]類型的參數,該參數決定填充哪些組件
*/
ListView list=(ListView)findViewById(R.id.mylist);
list.setAdapter(simpleAdapter);
/**
* 為單擊事件添加監聽器
*/
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//第position項被單擊時激發該方法
@Override
/**
* parent相當於listView list適配器的一個指標,可以通過它獲得list裡面裝著的一切東西
* view是點擊某一項獲得點擊那一項控制項id後操作控制項
* position是點擊的項在list適配器中的位置(產生listView時,適配器一個一個的做item,然後把他們按順序排好隊,在放到listView裡,意思就是這個項是第position號做好的)
* id是點擊的項在listView裡面第幾行的位置,大部分時候position和id的值是一樣的
*/
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println(names[position] + "被單擊了");
}
});
/**
* 為選中事件添加監聽器
*/
list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//第position項被選中時激發該方法
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
System.out.println(names[position] + "被選中了");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
android中SimpleAdapter