[译文]List View - Android SDK Tutorials系列

List View

ListViewViewGroup 的一种,以列表的方式显示条目,可以通过滚动条来查看整个列表。ListView通过ListAdapter来获得要显示的条目。

本教程里,将创建一个国名列表,国名保存在一个字符串数组里。当点击一个国名时,会有一个消息框显示被选中的国名。

  1. 创建一个工程:HelloListView.
  2. 在res/layout/下创建一个XML文件list_item.xml,内容如下:
    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dp"
        android:textSize="16sp" >
    </TextView>

    这个文件设置列表里每个条目的显示布局。

  3. 打开HelloListView.java ,将基类修改为ListActivity
    public class HelloListView extends ListActivity {
  4. 修改onCreate()方法如下:
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
    
      setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
    
      ListView lv = getListView();
      lv.setTextFilterEnabled(true);
    
      lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
          // When clicked, show a toast with the TextView text
          Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
              Toast.LENGTH_SHORT).show();
        }
      });
    }

    注意,这里没有加载当前Activity的布局文件(通常会通过setContentView(int)方法来加载布局文件)。取而代之的,setListAdapter(ListAdapter)方法用一个ListView来填充整个屏幕,这个方法使用ArrayAdapter来管理放在ListView的条目。ArrayAdapter构造函数持有应用Context,每个条目的布局描述(上一步创建的布局),以及一个对象数组(将在下一步创建)。

    setTextFilterEnabled(boolean) 方法打开ListView的文本过滤功能,因此,当用户输入文本时,符合条件的条目会列出来,不符合的会过滤掉。

    setOnItemClickListener(OnItemClickListener) 方法为每个条目设置一个点击事件的监听器。当ListView了的一个条目被点击以后,, android.view.View, int, long)"><?>, android.view.View, int, long)">onItemClick() 方法会被调用,在屏幕上显示一个消息框,内容是被点击条目的内容。

    小贴士: 在ListAdapter里,你可以使用平台自带的条目布局文件代替你自己的。例如,试试用android.R.layout.simple_list_item_1 来代替R.layout.list_item。

  5. onCreate()方法下面定义一个字符串数组,如下:
      static final String[] COUNTRIES = new String[] {
        "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
        "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
        "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
        "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
        "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
        "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
        "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
        "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
        "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
        "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
        "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
        "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
        "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
        "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
        "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
        "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
        "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
        "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
        "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
        "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
        "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
        "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
        "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
        "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
        "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
        "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
        "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
        "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
        "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
        "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
        "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
        "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
        "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
        "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
        "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
        "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
        "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
        "Ukraine", "United Arab Emirates", "United Kingdom",
        "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
        "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
        "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
      };

    这个数组里的字符串将被放到ListView里。

  6. 运行应用。

你可以滚动列表,或者输入字符来显示符合条件的条目;然后点击条目,会看到一个消息框显示条目的内容。你应该看到如下的画面:

注意,不提倡在实践中使用硬编码的字符串数组。这里使用字符串数组是为了让教程简单化,主要目的是介绍窗口小部件ListView。最好的方法是引用一个在外部资源定义的字符串数组,例如在res/values/strings.xml 里添加<string-array> 资源,示例如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="countries_array">
        <item>Bahrain</item>
        <item>Bangladesh</item>
        <item>Barbados</item>
        <item>Belarus</item>
        <item>Belgium</item>
        <item>Belize</item>
        <item>Benin</item>
    </string-array>
</resources>

为了在ArrayAdapter上使用上面的字符串资源,用下面的代码代替原来的setListAdapter(ListAdapter)

String[] countries = getResources().getStringArray(R.array.countries_array);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, countries));

posted on 2011-12-08 12:22  OnionD  阅读(219)  评论(0编辑  收藏  举报

导航