• 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>
  • 相关阅读:
    报表
    重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)
    重构改善既有代码设计--重构手法01:Extract Method (提炼函数)
    httpclient 学习
    JAVA中反射机制六(java.lang.reflect包)
    JAVA中反射机制五(JavaBean的内省与BeanUtils库)
    JAVA中反射机制四
    JAVA中反射机制三
    JAVA中反射机制二
    JAVA中反射机制一
  • 原文地址:https://www.cnblogs.com/hjtdlx/p/3952512.html
Copyright © 2020-2023  润新知