Android--- AdapterView and Adapter
适配器 – Adapter
- Adapter是UI控件和实际数据之间的桥梁,通过adapter将数据展示到UI上
- Adapter本身只是一个接口,Adapter及其子类的继承关系图
- Adapter常用的实现类如下。
- ArrayAdapter: 简单、易用的Adapter。通常用于将数组或List集合的多个值包装成多个列表项。
- SimpleAdapter: 并不简单、功能强大的Adapter.可用于将List集合的多个对象包装成多个列表项。
- SimpleCursorAdapter: 与SimpleAdapter基本相似,只是用于包装Cursor提供的数据。
- BaseAdapter: 通常用于被扩展。扩展BaseAdapter可以对各列表项进行最大限度的定制。
UI控件 – AdapterView
- AdapterView是常用的安卓UI控件
- AdapterView继承了ViewGroup.它的本质是容器。
- AdapterView显示的多个“列表项”由Adapter提供。调用AdapterView的**setAdapter(Adapter)**方法设置Adapter即可
- Adapter是UI控件和实际数据之间的桥梁,通过adapter将数据展示到UI上
- AdapterView是一个抽象类, 具体继承关系如下
- 常用的实体类为第四行, 注意Gallery已经被淘汰, 可以用HorizontalScrollView
- ListView也可用RecyclerView替代
ListView
简单的ListView实现
定义一个item布局文件(list中的每一项) – list_item.xml
<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="24sp"
android:id = "@+id/listItem"
>
</TextView>
定义一个listView布局文件 – list_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/myList"/>
</LinearLayout>
*
使用Adapter
package com.example.homework2;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int height = size.y;
String[] items = new String[]{
"Apple", "Mongo", "Pear", "Grape", "Banana", "Strawberry", "Blackberry", "Raspberry", "Peach", "Watermelon", "Cherry", "DragonFruit"};
final ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < items.length; i++) {
list.add(items[i]);
}
ListView listview = findViewById(R.id.myList);
listview.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, list) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView textView = (view.findViewById(R.id.listItem));
textView.setMinHeight(0);
textView.setMinimumHeight(0);
textView.setHeight(height/ items.length);
return view;
}
});
}
输出结果
图文ListView实现
定义一个listView布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"