Android ListView示例教程

时间:2020-02-23 14:29:02  来源:igfitidea点击:

我们将学习如何创建一个简单的Android ListView并在选择单个列表项时启动新的活动。

什么是Android ListView?

Android ListView是将多个项目分组并在垂直滚动列表中显示的视图。
列表项是使用适配器从列表或者数据库等源中自动提取内容的适配器自动插入列表中的。
它是android的基本且使用最多的UI组件之一。
最常见的用法包括以垂直滚动列表的形式显示数据。

使用适配器

适配器实际上是UI组件和将数据填充到UI组件中的数据源之间的桥梁。
适配器保存数据并将数据发送到适配器视图,该视图可以从适配器视图获取数据,并在不同的视图(例如微调器,列表视图,网格视图等)上显示数据。
适配器将项目从数据源中拉出,例如一个数组,然后将每个项目转换为一个视图,然后将其插入到ListView中。

ListView和GridView是AdapterView的子类,可以通过将它们绑定到Adapter来填充,后者从外部源检索数据并创建一个表示每个数据条目的View。
常见的适配器是ArrayAdapter,BaseAdapter,CursorAdapter,SimpleCursorAdapter,SpinnerAdapter和WrapperListAdapter。

处理Android ListView点击

onListItemClick()方法用于处理对Android ListView项目的点击。
此方法接收4个参数:

  • ListView:包含项目视图的ListView
  • 视图:选定的特定项目视图
  • 位置:所选项目在数组中的位置。
    请记住,数组的索引为零,因此数组的第一项位于位置0
  • ID:所选项目的ID。
    对于我们的教程而言并不重要,但是在使用从数据库中检索的数据时非常重要,因为您可以使用id(数据库中包含该项目的行的ID)从数据库中检索该项目

Android ListView示例项目结构

首先定义字符串资源文件以存储所有列表项标签。
因此,我们在values文件夹下创建一个XML文件,并将其命名为strings.xml并粘贴以下代码。

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="teams">
      <item>San Franceco</item>
      <item>South Africa</item>
      <item>Australia</item>
      <item>England</item>
      <item>New Zealand</item>
      <item>Sri Lanka</item>
      <item>Pakistan</item>
      <item>West Indies</item>
      <item>Bangladesh</item>
      <item>Ireland</item>
  </string-array>
</resources>

每个列表视图项将由一个xml布局表示,因此让我们定义由单个textview组成的xml布局,如下所示:

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<!--  Single List Item Design -->
<TextView xmlns:android="https://schemas.android.com/apk/res/android"
  android:id="@+id/textview"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:padding="10dip"
      android:textSize="16dip"
      android:textStyle="bold" >
</TextView>

以下片段显示了如何导入xml资源数据并将其存储在数据中,然后将它们绑定到适配器:

//storing string resources into Array
String[] teams = getResources().getStringArray(R.array.teams);

//Binding resources Array to ListAdapter
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.textview, teams));

在下面的代码中,我们从选定的项目中获取数据值,然后将其作为数据包使用intent传递给下一个活动。

MainActivity.java

package theitroad.local.listview;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends ListActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //storing string resources into Array
      String[] teams = getResources().getStringArray(R.array.teams);

      //Binding resources Array to ListAdapter
      this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.textview, teams));

      ListView lv = getListView();

      //listening to single list item on click
      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,
                                  int position, long id) {

              //selected item 
              String team = ((TextView) view).getText().toString();

              //Launching new Activity on selecting single List Item
              Intent i = new Intent(getApplicationContext(), SecondActivity.class);
              //sending data to new activity
              i.putExtra("team", team);
              startActivity(i);

          }
      });
  }
}

SecondActivity类从选定的列表项中检索文本标签,并将其显示在textview中,如以下代码片段所示。

SecondActivity.java

package theitroad.local.listview;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_second);
      TextView txtProduct = (TextView) findViewById(R.id.team_label);

      Intent i = getIntent();
      //getting attached intent data
      String product = i.getStringExtra("team");
      //displaying selected product name
      txtProduct.setText(product);
  }
}