Android Studio 通过 ListVIew 学习 Adapter

 

?ListView简介

  在 Android 系统的很多应用中,我们会经常看到列表。

  而且列表的样式各种各样,这是怎么实现的呢?

  答案是通过 ListView 实现的。

  ListView 的直接父类是 View.Group,也就是说,他自己定义了子排列 View 的规则。

  ListView 和所要展示的内容(数据源)之间需要 Adapter(适配器) 来实现。

  Adapter 是一个桥梁,对 ListView 的数据进行管理。

  数据来源不同,所使用的 Adapter 也不同,数据源(Data source)、Adapter和列表(ListView)之间的关系如下图所示: 

Android Studio 通过 ListVIew 学习 Adapter

  而生成列表视图的方式主要有两种:

  • 直接用ListView进行创建
  • 让Activity继承ListActivity

  而一旦获取到 ListView 后,对数据的填充就是由 Adapter 提供内容了,通常使用 setAdapter() 方法。

?ListView相关属性

  • android:dividerHeight="2dp" : 设置分割线高度
  • android:divider="#3CA9C4" : 设置分隔线颜色

?Adapter简介

  Adapter 是一个接口。

  ListAdapter 继承了 Adapter,也是一个接口,并需要子类实现。

  BaseAdapter 实现了 ListAdapter,他是一个抽象类。

  SimpleAdapter 继承自 BaseAdapter,他是 Adapter 的一个实例对象。

  另外,还有 ArrayAdapter 和 SimpleCursorAdapter 也是 Adapter 的实例对象。

  Adapter 的继承结关系如下图所示:

Android Studio 通过 ListVIew 学习 Adapter

 

  • BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter
  • ArrayAdapter:支持泛型操作,最简单的一个Adapter,只能展现一行文字
  • SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果
  • SimpleCursorAdapter:用于显示简单文本类型的listView,一般在数据库那里会用到,不过有点过时, 不推荐使用

 


 

ArrayAdapter

?案例一

  在 res/layout 新建 activity_array_adapter.xml 文件,添加代码如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     android:padding="10dp">
 7 
 8     <TextView
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"
11         android:text="测试ArrayAdapter"
12         android:textSize="20sp"/>
13     <ListView
14         android:id="@+id/lv_array_adapter"
15         android:layout_width="match_parent"
16         android:layout_height="wrap_content"
17         android:divider="#3CA9C4"
18         android:dividerHeight="2dp"
19         android:headerDividersEnabled="false"
20         />
21 
22 </LinearLayout>

  ListView 设置了分割线为蓝色。

  新建 ArrayAdapterActivity.java 代码,添加代码如下:

 1 public class ArrayAdapterActivity extends AppCompatActivity {
 2 
 3     private ListView lv1;
 4     @Override
 5     protected void onCreate(@Nullable Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_array_adapter);
 8 
 9         lv1 = findViewById(R.id.lv_array_adapter);
10         String[] s = new String[]{"明楼","明台","明诚","明镜"};
11         ArrayAdapter<String> adapter = new ArrayAdapter<>(this,R.layout.array_item,s);
12         lv1.setAdapter(adapter);
13     }
14 }

  其中定义了一个字符串数组 s ,通过 ArrayAdapter 进行包装作为listView的数据源。

  R.layout.array_item 则是数据项的布局,用来设置显示的字体(明楼、明台、明诚、明镜)风格,代码如下:

1 <?xml version="1.0" encoding="utf-8"?>
2 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
3     android:layout_width="match_parent"
4     android:layout_height="match_parent"
5     android:id="@+id/textView"
6     android:textSize="20sp"
7     android:padding="10dp">
8 
9 </TextView>

?运行效果

Android Studio 通过 ListVIew 学习 Adapter

?案例二

  除了通过直接用ListView进行创建外,还可以通过让 Activity 继承 ListActivity 来实现。

  将 ArrayAdapterActivity.java 代码改成如下内容:

 1 public class ArrayAdapterActivity extends ListActivity {
 2 
 3     private ListView lv1;
 4     @Override
 5     protected void onCreate(@Nullable Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         
 8         String[] s = new String[]{"明楼","明台","明诚","明镜"};
 9         ArrayAdapter<String> adapter = new ArrayAdapter<>(this,R.layout.array_item,s);
10 
11         setListAdapter(adapter);
12     }
13 }

?运行效果

Android Studio 通过 ListVIew 学习 Adapter

 

Android Studio 通过 ListVIew 学习 Adapter

上一篇:学好Mac常用命令,助力iOS开发


下一篇:关于Recycle Bin是什么以及实验