Android ListView和ListAdapter示例

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

在上一个教程中,我们通过一个简单的示例了解了列表视图布局。本教程介绍用于创建自定义列表的列表适配器。

Android列表适配器

列表视图非常简单,是否要自定义列表?ListAdapter用于自定义列表视图布局。它的行为类似于数据源和列表视图之间的桥梁。它的父类是BaseAdapter。当我们要为列表中的各个行指定布局时,可以使用它。不要把它和ArrayAdapter混淆,ListAdapter是一个接口,而ArrayAdapter是一个处理数据数组的类。

ListAdapter构造函数

ListAdapter的构造函数接受一个参数,该参数为每一行指定一个布局资源。除此之外,它还有另外两个参数(这两个参数通常是并行数组),这使我们能够指定要将哪个数据字段与行布局资源中的哪个对象相关联。

列表适配器方法

ListAdapter具有以下公共方法。

areAllItemsEnabled():通过返回一个布尔值来判断列表适配器中的所有项是否被启用。如果返回true,则表示所有项目都是可选择和可单击的。如果它返回不同的值(如果值发生变化),则无法保证它会生效。

isEnabled(int position):如果某个特定位置的项目是可点击可选择的,则返回true。如果给定的位置无效,则无法指定结果。

ListAdapter示例

让我们用ListAdapter开始编码。在上一个关于列表视图的教程中,已经讨论了计算机科学语言的一个简单示例。一个简单的列表。现在让我们做同样的事情,但用不同的方式。不只是显示语言列表,而是用语言图标显示。

首先为每一行创建一个布局,其中包含图像视图和文本视图。

list_single.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >
  <TableRow>
      <ImageView
          android:id="@+id/img"
          android:layout_width="100dp"
          android:layout_height="100dp"

      <TextView
          android:id="@+id/txt"
          android:layout_width="wrap_content"
          android:layout_height="100dp" 

  </TableRow>
</TableLayout>

创建一个java类并将其命名为 CustomList.java,这是它的代码

package com.example.admin.listadapterexample;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomList extends ArrayAdapter<String>{

  private final Activity context;
  private final String[] web;
  private final Integer[] imageId;
  public CustomList(Activity context,
                    String[] web, Integer[] imageId) {
      super(context, R.layout.list_single, web);
      this.context = context;
      this.web = web;
      this.imageId = imageId;

  }
  @Override
  public View getView(int position, View view, ViewGroup parent) {
      LayoutInflater inflater = context.getLayoutInflater();
      View rowView= inflater.inflate(R.layout.list_single, null, true);
      TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);

      ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
      txtTitle.setText(web[position]);

      imageView.setImageResource(imageId[position]);
      return rowView;
  }
}

现在创建一个主活动 mainActivty.java

package com.example.admin.listadapterexample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import android.app.Activity;

public class MainActivity extends Activity {
  ListView list;
  String[] web = {
          "Java",
          "C++",
          "C#",
          "HTML",
          "CSS"

  } ;
  Integer[] imageId = {
          R.drawable.java,
          R.drawable.cplus,
          R.drawable.csharp,
          R.drawable.html,
          R.drawable.download

  };

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      CustomList listAdapter = new
              CustomList(MainActivity.this, web, imageId);
      list=(ListView)findViewById(R.id.list);
      list.setAdapter(listAdapter);
      list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> parent, View view,
                                  int position, long id) {
              Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();

          }
      });

  }

}

activty_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity" >

  <ListView
      android:id="@+id/list"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" >

  </ListView>

</RelativeLayout>