ListActivity的使用

第一种情况,就是extends Activity ,而且事先也

setContentView(R.layout.main); 那么我定义的ListView就是在XML里面已经布局好了的。

18.public class aGirlGallery extends Activity {
19.    /** Called when the activity is first created. */
20.    @Override
21.    public void onCreate(Bundle savedInstanceState) {
22.        super.onCreate(savedInstanceState);
23.        setContentView(R.layout.main);
24.  
25.        // 绑定Layout里面的ListView
26.        ListView list = (ListView) findViewById(R.id.lv);
27.  
28.        // 生成动态数组,加入数据
29.        ArrayList<hashmap <String, Object>> listItem = new ArrayList</hashmap><hashmap <String, Object>>();
30.        for (int i = 0; i < 10; i++) {
31.            HashMap<String, Object> map = new HashMap<string , Object>();
32.            map.put("ItemImage", R.drawable.icon);// 图像资源的ID
33.            map.put("ItemTitle", "Level " + i);
34.            listItem.add(map);
35.        }
36.        // 生成适配器的Item和动态数组对应的元素
37.        SimpleAdapter listItemAdapter = new SimpleAdapter(this, listItem,// 数据源
38.                R.layout.list_items,// ListItem的XML实现
39.                // 动态数组与ImageItem对应的子项
40.                new String[] { "ItemImage", "ItemTitle" },
41.                // list_items中对应的的ImageView和TextView
42.                new int[] { R.id.ItemImage, R.id.ItemTitle });
43.  
44.        // 绑定数据源
45.        list.setAdapter(listItemAdapter);
46.  
47.        // 点击事件
48.        list.setOnItemClickListener(new OnItemClickListener() {
49.            @Override
50.            public void onItemClick(AdapterView< ?> arg0, View arg1, int position,
51.                    long id) {
52.                //do something?
53.            }
54.        });
55.  
56.        // 长按事件
57.        list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
58.  
59.            @Override
60.            public void onCreateContextMenu(ContextMenu menu, View v,
61.                    ContextMenuInfo menuInfo) {
62.                //do something?
63.            }
64.        });
65.    }
66.  
67.    // 长按菜单响应函数
68.    @Override
69.    public boolean onContextItemSelected(MenuItem item) {
70.        //do something?
71.        return super.onContextItemSelected(item);
72.    }
73.}

第一种情况,就是extends Activity ,但是事先没有setContentView(R.layout.main);

那么里面我的ListView是这样定义的listView = new ListView(this) 这里我的ListView还没有布局,所以最后还要setContentView(listView);

 

 

public class ActivityList2 extends Activity {

 private List<Map<String, Object>> data;
 private ListView listView = null;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  PrepareData();
  listView = new ListView(this);
   SimpleAdapter adapter = new SimpleAdapter(this, data,
    R.layout.list_item, new String[] { "姓名", "性别" }, new int[] {
      R.id.mview1, R.id.mview2 });
  listView.setAdapter(adapter);
  setContentView(listView); 
  
  OnItemClickListener listener = new OnItemClickListener() {
   public void onItemClick(AdapterView<?> parent, View view, int position,
     long id) {
    setTitle(parent.getItemAtPosition(position).toString());
   }
  };
  listView.setOnItemClickListener(listener);
 }

 private void PrepareData() {
  data = new ArrayList<Map<String, Object>>();
  Map<String, Object> item;
  item = new HashMap<String, Object>();
  item.put("姓名", "张三小朋友");
  item.put("性别", "男");
  data.add(item);
  item = new HashMap<String, Object>();
  item.put("姓名", "王五同学");
  item.put("性别", "男");
  data.add(item);
  item = new HashMap<String, Object>();
  item.put("姓名", "小李师傅");
  item.put("性别", "女");
  data.add(item);
 }
}

第三种情况 ,是我extends ListActivity,那么其实本身是不用setContentView,Android也会自动帮我们构造出一个全屏的列表

 

 

  1. public class HelloTwoB extends ListActivity
  2. ...{   
  3.     public void onCreate(Bundle icicle) ...{
  4.         super.onCreate(icicle);
  5.         setTheme(android.R.style.Theme_Dark);
  6.         setContentView(R.layout.mainb);
  7.         
  8.         List<String> items = fillArray();        
  9.         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_row,items);
  10.                
  11.         this.setListAdapter(adapter);
  12.     }
  13.     private List<String> fillArray()
  14.     ...{
  15.         List<String> items = new ArrayList<String>();
  16.         items.add("日曜日");
  17.         items.add("月曜日");
  18.         items.add("火曜日");
  19.         items.add("水曜日");
  20.         items.add("木曜日");
  21.         items.add("金曜日");
  22.         items.add("土曜日");
  23.         return items;
  24.     }
  25.    
  26.     @Override
  27.     protected void onListItemClick(ListView l, View v, int position, long id)
  28.     ...{
  29.         TextView txt = (TextView)this.findViewById(R.id.text);
  30.         txt.setText("あすは "+l.getSelectedItem().toString()+"です。");
  31.     }
  32. }
複製代碼

的確可以簡單到只需準備一個List物件並借助Adapter就可以構造出一個列表。重載onListItemClick方法可以回應選擇事件,利用第一個參數可以訪問到這個ListView實例以得到選中的條目資訊。這裏有一點要說明的,就是如果更簡單的話,其實連那個setContentView都可以不要了,Android也會自動幫我們構造出一個全屏的列表。但是本例中我們需要一個TextView來顯示選中的條目,所以我們需要一個 layout.mainb描述一下這個列表視窗。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     androidrientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7. <TextView id="@+id/text"
  8.     android:layout_width="fill_parent"
  9.     android:layout_height="wrap_content"
  10.     android:text=""
  11.     />
  12. <ListView id="@id/android:list"
  13.     android:layout_width="fill_parent"
  14.     android:layout_height="0dip"
  15.     android:layout_weight="1"
  16.     android:drawSelectorOnTop="false"
  17.     />
  18. </LinearLayout>
複製代碼

這裏需要注意的是那個ListView的ID,是系統自定義的android:list,不是我們隨便取的,否則系統會說找不到它想要的listview了。然後,在這個listview之外,我們又增加了一個TextView,用來顯示選中的條目。

再來說說這裏用到的ArrayAdapter,它的構造函數中第二個參數是一個資源ID,ArrayAdapter的API文檔中說是要求用一個包含TextView的layout檔,平臺用它來顯示每個選擇條目的樣式,這裏的取值是R.layout.list_row,所以,我們還有一個list_row.xml檔來描述這個佈局,相當簡單。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     androidrientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7. <TextView id="@+id/item"
  8.           xmlns:android="http://schemas.android.com/apk/res/android"
  9.           android:layout_width="wrap_content"
  10.           android:layout_height="wrap_content"/>
  11. <TextView id="@+id/item2"
  12.           xmlns:android="http://schemas.android.com/apk/res/android"
  13.           android:layout_width="wrap_content"
  14.           android:layout_height="wrap_content"/>
  15. </LinearLayout>
複製代碼

從ArrayAdapter上溯到BaseAdapter,發現還有幾個同源的Adapter也應該可以使用,象SimpleAdapter和CursorAdapter,還是做個例子來實驗一下吧。


原文地址:https://www.cnblogs.com/tt_mc/p/1701369.html