这篇文章我们将重点介绍ListView控件,并介绍 适配器(Adapter) 的使用,适配器的作用是将复杂的数据填充在指定的视图界面上
,这么说可能不太明白,下面我们会详细介绍,本篇介绍的控件包括:
- ListView(列表)
- Spinner(下拉列表)
- GridView(网格视图)
- ViewPager(试图滑动切换工具)
1. ListView(列表)
ListView 以列表的形式展示数据,需要用到 适配器 搭建数据源和视图界面的桥梁
。如果是单一的数据,可使用ArrayAdapter适配器加载数据。我们需要把数据加载到适配器中,再将适配器绑定给ListView,具体步骤如下:
- 创建ListView控件;
- 准备数据源;
- 适配器绑定数据源;
- ListView控件绑定适配器;
实例:
- 创建ListView控件;
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#00000000"></ListView>
</LinearLayout>
- 准备数据源,适配器绑定数据源,ListView控件绑定适配器;
MainActivity.java
public class MainActivity extends AppCompatActivity {
private ListView listView;
private ArrayAdapter<String> adapter;//适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
String data[] ={
"apple","banana","watermelon","pear","peach"};//数据源
adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,data);//适配器绑定数据源
listView.setAdapter(adapter);//ListView绑定适配器
}
}
ArrayAdapter<>(this,android.R.layout.simple_list_item_1,data); 3个参数分别是:
- context:上下文
- LayoutRes:列表项布局(此处使用系统提供的布局)
- 数据源
效果:
是不是挺简单的,这里提出一个问题:怎么让ListView中的每一项具有点击事件呢? 这里依旧用到我们上篇文章介绍Button时学到的 监听器,ListView的监听器是 OnItemClickListener ,监听器中的 int类型参数 position 表示点击项为第几项(从0数起)。
MainActivity.java
//监听器
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String text = listView.getItemAtPosition(position)+"";//getItemAtPosition()方法用于获取被点击项的内容
Toast.makeText(MainActivity.this, position +" , "+ text,Toast.LENGTH_SHORT).show();
}
});
效果:
上面的实例中,列表项是单一的数据,如果我们要实现每个列表项由 图片+文字内容 组成呢?能不能做到呢?答案是肯定的,这里我们只需要自定义我们的列表项布局,自定义适配器即可,步骤如下:
- 创建一个列表项布局;
- 创建一个实体类(作为适配器的适配类型);
- 创建一个适配器继承自ArrayAdapter,重写方法;
实例如下:
- 创建一个列表项布局
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/imageView"
android:src="@mipmap/ic_launcher"
android:layout_width="100dp"
android:layout_height="100dp" />
<TextView
android:id="@+id/textView2"
android:text="fruit"
android:textSize="40dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
- 创建一个实体类(作为适配器的适配类型)
Fruit.java
public class Fruit {
private String name;
private int imageid;
public Fruit(int imageid, String name){
this.name = name;
this.imageid = imageid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageid() {
return imageid;
}
public void setImageid(int