原文: https://javatutorial.net/android-listview-with-listadapter-example

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

Android ListAdapter

列表视图非常简单,您要自定义列表吗?ListAdapter用于自定义列表视图的布局。 它的行为就像是数据源和列表视图之间的桥梁。 它的父类是BaseAdapter。 当您要为列表中的各个行指定布局时使用。 不要将其与ArrayAdapter混淆,ListAdapter是一个接口,而ArrayAdapter是可处理数据数组的类。 下图显示了使用ListAdapter的自定义列表视图。

带有`ListAdapter`的 Android `ListView`示例 - 图1

列表适配器

ListAdapter构造函数

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

ListAadapter的方法

ListAdapter具有以下公共方法。

  • areAllItemsEnabled():它通过返回布尔值来告知是否启用列表适配器中的所有项目。 如果返回true,则表示所有项目都是可选择和可单击的。 如果返回不同的值(如果值更改),则不能保证它将生效。
  • isEnabled(int position):如果可以单击并选择位于特定位置的项目,则返回true。如果给定的位置无效,则无法指定结果。

ListAdapter的示例

让我们开始使用ListAdapter进行编码。在列表视图的先前教程中,已经讨论了计算机科学语言的简单示例。 这被显示为简单列表。 现在,我们以不同的方式做同样的事情。 不仅显示语言列表,还显示带有语言图标。

首先为每行创建一个布局,该布局具有图像视图和文本视图。 这是list_single.xml的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" >
  5. <TableRow>
  6. <ImageView
  7. android:id="@+id/img"
  8. android:layout_width="100dp"
  9. android:layout_height="100dp"/>
  10. <TextView
  11. android:id="@+id/txt"
  12. android:layout_width="wrap_content"
  13. android:layout_height="100dp" />
  14. </TableRow>
  15. </TableLayout>

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

  1. package com.example.admin.listadapterexample;
  2. import android.app.Activity;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.ArrayAdapter;
  7. import android.widget.ImageView;
  8. import android.widget.TextView;
  9. public class CustomList extends ArrayAdapter<String>{
  10. private final Activity context;
  11. private final String[] web;
  12. private final Integer[] imageId;
  13. public CustomList(Activity context,
  14. String[] web, Integer[] imageId) {
  15. super(context, R.layout.list_single, web);
  16. this.context = context;
  17. this.web = web;
  18. this.imageId = imageId;
  19. }
  20. @Override
  21. public View getView(int position, View view, ViewGroup parent) {
  22. LayoutInflater inflater = context.getLayoutInflater();
  23. View rowView= inflater.inflate(R.layout.list_single, null, true);
  24. TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
  25. ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
  26. txtTitle.setText(web[position]);
  27. imageView.setImageResource(imageId[position]);
  28. return rowView;
  29. }
  30. }

现在创建一个主要活动,mainActivty.java的代码是

  1. package com.example.admin.listadapterexample;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.AdapterView;
  7. import android.widget.ListView;
  8. import android.widget.Toast;
  9. import android.app.Activity;
  10. public class MainActivity extends Activity {
  11. ListView list;
  12. String[] web = {
  13. "Java",
  14. "C++",
  15. "C#",
  16. "HTML",
  17. "CSS"
  18. } ;
  19. Integer[] imageId = {
  20. R.drawable.java,
  21. R.drawable.cplus,
  22. R.drawable.csharp,
  23. R.drawable.html,
  24. R.drawable.download
  25. };
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_main);
  30. CustomList listAdapter = new
  31. CustomList(MainActivity.this, web, imageId);
  32. list=(ListView)findViewById(R.id.list);
  33. list.setAdapter(listAdapter);
  34. list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  35. @Override
  36. public void onItemClick(AdapterView<?> parent, View view,
  37. int position, long id) {
  38. Toast.makeText(MainActivity.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();
  39. }
  40. });
  41. }
  42. }

这是activty_main.xml布局的样子

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context=".MainActivity" >
  6. <ListView
  7. android:id="@+id/list"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content" >
  10. </ListView>
  11. </RelativeLayout>

运行您的应用程序,这里是输出

带有`ListAdapter`的 Android `ListView`示例 - 图2

列表适配器示例

您可以通过单击链接下载此代码。