zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    XAML学习笔记之Layout(五)——ViewBox
    XAML学习笔记——Layout(三)
    XAML学习笔记——Layout(二)
    XAML学习笔记——Layout(一)
    从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
    从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
    Sql Server 2012 事务复制遇到的问题及解决方式
    Sql Server 2008R2升级 Sql Server 2012 问题
    第一次ACM
  • 原文地址:https://www.cnblogs.com/hjtdlx/p/3952512.html
Copyright © 2011-2022 走看看