Directorio de artículos
- 1. Descripción general de la vista de lista
- 2. Caso de uso de vista de lista basada en un adaptador de matriz: lectura de poemas antiguos
-
- 1. Puntos de conocimiento involucrados
- 2. Pasos de implementación
-
- (1) Crear una aplicación para Android [ReadAncientPoetry]
- (2) Copie la imagen de fondo al directorio dibujable
- (3), archivo de recursos de cadena
- (4) Archivo de recursos de diseño Activity_main.xml
- (5) Crea una plantilla de lista de poesía
- (6), función de implementación de la clase de interfaz principal
- (7) Cree una interfaz para mostrar el contenido de poemas antiguos-ContentActivity
- (8), archivo de recursos de cadena strings.xml
- (9) Archivo de recursos de diseño de interfaz de contenido
- (10) Modificar la clase de interfaz principal e implementar instancias de ventana
- (11) Modificar la interfaz de contenido y mostrar poemas antiguos.
- (12), Ver el código final
- 3. Crea un adaptador simple
-
- 1. Documentación API del adaptador simple
- 2. Diagrama de herencia de adaptador simple
- 3. Método de construcción de adaptador simple
- 4. Estuche adaptador personalizado - libreta de direcciones
-
- (1) Crear aplicaciones de Android
- (2) Copie el material de la imagen al directorio dibujable.
- (3), archivo de recursos de cadena strings.xml
- (4) Archivo de recursos de diseño principal actividad_main.xml
- (5) Plantilla de elemento de lista de contactos contact_list_item.xml
- (6), clase de interfaz principal-MainActivity
- (7), código fuente de MainActivity de la clase de interfaz principal
- 4. Caja adaptadora personalizada - Persona de contacto
-
- 1. Crea una aplicación de Android
- 2. Copie la imagen de fondo al directorio dibujable.
- 3. Archivo de recursos de cadena
- 3. Archivo de recursos de diseño principal actividad_main.xml
- 5. Cree una plantilla de elemento de lista de contactos
- 6. Cree una clase de entidad de contacto
- 7. Crea un adaptador de contactos
- 8. Función de implementación de la clase de interfaz principal
- 8. Funciones de la interfaz principal
1. Descripción general de la vista de lista
1. Diagrama de herencia
La vista de lista (ListView) hereda la vista de lista abstracta (AbsListView), que a su vez hereda la vista del adaptador (AdapterView). Las vistas del adaptador tienen una característica común, que es utilizar el adaptador para vincular la fuente de datos al control de pantalla.
2. Cuatro elementos de la vista de lista
elemento | ilustrar |
---|---|
Control de lista | Mostrar varios elementos para los usuarios |
adaptador | Adaptador de matriz, adaptador simple, adaptador de cursor, adaptador de base... |
fuente de datos | Matrices, listas, cursores... |
Plantilla de elemento de lista | Recursos de la plataforma, personalización del usuario. |
- Cuatro elementos de la vista de lista: control de lista, adaptador, plantilla de elemento de lista y fuente de datos
3. Cuatro tipos de adaptadores
- List View (ListView), que es la clase hija de AdapterView, utiliza el adaptador como puente para vincular fuentes de datos.
adaptador | significado |
---|---|
ArrayAdapter | adaptador de matriz |
Adaptador simple | adaptador sencillo |
Adaptador de cursor simple | Adaptador de cursor simple |
Adaptador base | adaptador base |
2. Caso de uso de vista de lista basada en un adaptador de matriz: lectura de poemas antiguos
- Breve descripción del caso: Contiene dos ventanas. La primera ventana es una lista de títulos de poemas antiguos para que el usuario elija. Cuando el usuario hace clic en un elemento, salta inmediatamente a la segunda ventana, que muestra el contenido (título, autor). , etc.) del poema antiguo seleccionado por el usuario. , texto), la segunda ventana tiene un botón para regresar a la tabla de contenido, haga clic en este botón para regresar a la primera ventana que muestra la lista de títulos de poemas antiguos.
1. Puntos de conocimiento involucrados
- Diseño lineal
- Etiqueta (vista de texto)
- Botón
- Vista de la lista
- Adaptador de matriz
- Matriz o lista de matrices (Array | ArrayList)
2. Pasos de implementación
(1) Crear una aplicación para Android [ReadAncientPoetry]
- Crear una aplicación de Android basada en
Empty Activity
ReadAncientPoetry
- Haga clic en el botón [finalizar]
(2) Copie la imagen de fondo al directorio dibujable
- Copiar la imagen de fondo al
drawable
directorio
(3), archivo de recursos de cadena
- Archivo de recursos de cadena
strings.xml
- Ver código completo
<resources>
<string name="app_name">阅读古诗</string>
<string-array name="titles">
<item>静夜思</item>
<item>登鹳雀楼</item>
<item>相思</item>
<item>听弹琴</item>
<item>登乐游原</item>
<item>朝发白帝城</item>
<item>巴山夜雨</item>
<item>渭城曲</item>
<item>春夜喜雨</item>
<item>离离原上草</item>
<item>示儿</item>
</string-array>
<string-array name="authors">
<item>唐·李白</item>
<item>唐·王之涣</item>
<item>唐·王维</item>
<item>唐·刘长卿</item>
<item>唐·李商隐</item>
<item>唐·李白</item>
<item>唐·杜牧</item>
<item>唐·王维</item>
<item>唐·杜甫</item>
<item>唐·白居易</item>
<item>宋·陆游</item>
</string-array>
<string-array name="contents">
<item>床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。</item>
<item>白日依山尽,\n黄河入海流。\n欲穷千里目,\n更上一层楼。</item>
<item>红豆生南国,\n春来发几枝。\n愿君多采撷,\n此物最相思。</item>
<item>泠泠七弦上,\n静听松风寒。\n古调虽自爱,\n今人多不弹。</item>
<item>向晚意不适,\n驱车登古原。\n夕阳无限好,\n只是近黄昏。</item>
<item>朝辞白帝彩云间,\n千里江陵一日还。\n两岸猿声啼不住,\n轻舟已过万重山。</item>
<item>君问归期未有期,\n巴山夜雨涨秋池。\n何当共剪西窗烛,\n却话巴山夜雨时。</item>
<item>渭城朝雨浥轻尘,\n客舍青青柳色新。\n劝君更尽一杯酒,\n西出阳关无故人。</item>
<item>好雨知时节,当春乃发生。\n随风潜入夜,润物细无声。\n野径云俱黑,江船火独明。\n晓看红湿处,花重锦官城。</item>
<item>离离原上草,一岁一枯荣。\n野火烧不尽,春风吹又生。\n远芳侵古道,晴翠接荒城。\n又送王孙去,萋萋满别情。</item>
<item>死去元知万事空,\n但悲不见九州同。\n王师北定中原日,\n家祭无忘告乃翁。 </item>
</string-array>
</resources>
(4) Archivo de recursos de diseño Activity_main.xml
- archivo de recursos de diseño
activity_mian.xml
- Ver código completo
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:background="@drawable/background"
android:padding="15dp"
tools:context=".MainActivity">
<ListView
android:id="@+id/lv_poem_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#aaaaaa"
android:dividerHeight="0.5dp"/>
</LinearLayout>
- Ver efecto de vista previa
(5) Crea una plantilla de lista de poesía
- Crear una plantilla de lista de poesía
poem_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="wrap_content"
android:id="@+id/tv_poem_title"
android:gravity="center_vertical"
android:minHeight="80dp"
android:textColor="#0000ff"
android:textSize="25sp">
</TextView>
(6), función de implementación de la clase de interfaz principal
-
Clase de interfaz principal -
MainActivity
-
declarar variables
-
Obtener la instancia de control por identificador de recurso
-
Inicializar la matriz de títulos de poemas antiguos
-
Cree un adaptador de matriz como puente entre los controles de lista y las fuentes de datos
-
Establecer adaptador para la lista
-
Modificar efecto deslizante
-
Modifique la clase de interfaz principal y registre un detector de clics de elemento para el control de lista
-
La posición del parámetro es la posición donde el usuario hizo clic en el elemento de la lista, comenzando desde 0. Por ejemplo, si el usuario hace clic en el tercer elemento de la lista, entonces la posición es igual a 2. En otras palabras, la posición debe aumentarse en 1 para determinar el número de línea.
-
El valor del parámetro id es igual al valor de la posición del parámetro. Los dos parámetros son simplemente tipos diferentes.
(7) Cree una interfaz para mostrar el contenido de poemas antiguos-ContentActivity
- Archivo de recursos de diseño de interfaz de contenido -
ContentActivity
(8), archivo de recursos de cadena strings.xml
(9) Archivo de recursos de diseño de interfaz de contenido
- Abra el archivo de recursos de diseño de contenido -
content_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:background="@drawable/background"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="30dp"
android:layout_marginBottom="20dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:textColor="#ff00ff"
android:textSize="40sp" />
<TextView
android:id="@+id/tv_author"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginBottom="20dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:textColor="#000000"
android:textSize="25sp" />
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginBottom="20dp"
android:layout_weight="8"
android:textColor="#0000ff"
android:textSize="30sp" />
<Button
android:id="@+id/btn_back"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:onClick="doBack"
android:text="@string/back"
android:textSize="20sp" />
</LinearLayout>
(10) Modificar la clase de interfaz principal e implementar instancias de ventana
(11) Modificar la interfaz de contenido y mostrar poemas antiguos.
-
declarar variables
-
Obtener la instancia de control por identificador de recurso
-
Obtenga la intención del salto de ventana, obtenga la posición que lleva la intención y realice el procesamiento correspondiente
-
Escriba el botón [Volver al catálogo de poesía antigua], haga clic en el método de procesamiento de eventos
-
comprobar el efecto
vista de la lista
(12), Ver el código final
①Clase de interfaz principal: MainActivity
package net.xyx.read_ancient_poetry;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private ListView lvPoemTitle;//诗歌标题列表控件 - 展示
private ArrayAdapter<String> adapter;//数组适配器 - 桥梁
private String[] titles;//诗歌标题数组 - 数据源
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//利用布局资源文件设置用户界面
setContentView(R.layout.activity_main);
//通过资源标识符获取控件实例
lvPoemTitle = findViewById(R.id.lv_poem_title);
//初始化古诗标题数组,作为列表控件的数据源
titles = getResources().getStringArray(R.array.titles);
//给古诗标题填上序号
for (int i = 0; i < titles.length; i++){
titles[i] = (i + 1) + "." + titles[i];
}
//创建数组适配器,作为连接列表控件与数据源的桥梁
adapter = new ArrayAdapter<>(
this,//上下文
R.layout.poem_list_item,//列表项模板 - 平台布局资源
titles //数据源 - 字符串数据组
);
//给列表控件设置适配器
lvPoemTitle.setAdapter(adapter);
//给列表控件注册项单击监听器
lvPoemTitle.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this,
"你选择了古诗[" + titles[position] + "]",
Toast.LENGTH_SHORT).show();
//创建时新窗口跳转的意图
Intent intent = new Intent(MainActivity.this, ContentActivity.class);
//通过意图携带数据(选中的列表项位置)
intent.putExtra("position",position);
//按意图启动目标组件
startActivity(intent);
}
});
}
}
②Interfaz de contenido-ContentActivity
package net.xyx.read_ancient_poetry;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class ContentActivity extends AppCompatActivity {
private TextView tvTitle;//标题标签
private TextView tvAuthor;//作者标签
private TextView tvContent;//内容标签
private String[] titles;//标题数组
private String[] authors;//作者数组
private String[] contents;//内容数组
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//利用布局资源文件设置用户界面
setContentView(R.layout.activity_content);
//通过资源标识符获取控件实例
tvTitle = findViewById(R.id.tv_title);
tvAuthor = findViewById(R.id.tv_author);
tvContent = findViewById(R.id.tv_content);
//获取窗口跳转的意图
Intent intent = getIntent();
//判断意图是否为空
if (intent != null){
//获取意图携带的数据
int position = intent.getIntExtra("position",0);
//获取古诗标题数组
titles = getResources().getStringArray(R.array.titles);
//获取古诗作者数组
authors = getResources().getStringArray(R.array.authors);
//获取古诗内容数组
contents = getResources().getStringArray(R.array.contents);
//设置标题标签文本
tvTitle.setText(titles[position]);
//设置作为标签文本
tvAuthor.setText(authors[position]);
//设置内容标签文本
tvContent.setText(contents[position]);
}
}
/**
*
* 【返回古诗目录】按钮单击事件处理方法
* @param view
*/
public void doBack(View view){
finish();//关闭当前窗口
}
}
3. Crea un adaptador simple
1. Documentación API del adaptador simple
https://developer.android.google.cn/reference/kotlin/android/widget/SimpleAdapter?hl=en
2. Diagrama de herencia de adaptador simple
- La clase SimpleAdapter hereda la clase BaseAdapter
3. Método de construcción de adaptador simple
- El adaptador simple proporciona un constructor con 5 parámetros.
4. Estuche adaptador personalizado - libreta de direcciones
(1) Crear aplicaciones de Android
- Crear una aplicación de Android basada en
Empty Activity
plantilla -Contacts
- Haga clic en el botón [finalizar]
(2) Copie el material de la imagen al directorio dibujable.
(3), archivo de recursos de cadena strings.xml
<resources>
<string name="app_name">通讯录</string>
<string name="icon">图标</string>
<string name="name">姓名</string>
<string name="phone">电话</string>
</resources>
(4) Archivo de recursos de diseño principal actividad_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:background="@drawable/background"
android:orientation="vertical"
android:padding="10dp"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_icon"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_weight="0.5"
android:text="@string/icon"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/name"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:text="@string/phone"
android:textSize="20sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:background="#aaaaaa" />
<ListView
android:id="@+id/lv_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
(5) Plantilla de elemento de lista de contactos contact_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:background="@drawable/background"
android:orientation="vertical"
android:padding="10dp"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_icon"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_weight="0.5"
android:text="@string/icon"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/name"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:text="@string/phone"
android:textSize="20sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:background="#aaaaaa" />
<ListView
android:id="@+id/lv_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
(6), clase de interfaz principal-MainActivity
- declarar variables
- Obtener la instancia de control por identificador de recurso
- Inicializar lista de contactos (fuente de datos)
- Crea un adaptador simple como puente.
- Configurar un adaptador para el control de lista
(7), código fuente de MainActivity de la clase de interfaz principal
package net.xyx.contacts;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView lvContact; // 联系人列表控件(展示)
private SimpleAdapter adapter; // 简单适配器(桥梁)
private List<HashMap<String, Object>> contacts; // 联系人列表(数据源)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源文件设置用户界面
setContentView(R.layout.activity_main);
// 通过资源标识符获取控件实例
lvContact = findViewById(R.id.lv_contact);
// 初始化联系人列表(数据源)
contacts = getContacts();
// 创建简单适配器作为桥梁
adapter = new SimpleAdapter(
this, // 上下文
contacts, // 数据源(列表)
R.layout.contact_list_item, // 列表项模板
new String[] {"icon", "name", "phone"}, // 字段名数组
new int[] {R.id.tv_icon, R.id.tv_name, R.id.tv_phone} // 控件标识数组
);
// 给列表控件设置适配器
lvContact.setAdapter(adapter);
}
/**
* @return 联系人列表
*/
private List<HashMap<String, Object>> getContacts() {
// 声明联系人列表
List<HashMap<String, Object>> contacts = new ArrayList<>();
// 声明联系人
HashMap<String, Object> contact = null;
// 创建第1个联系人
contact = new HashMap<>();
contact.put("icon", R.drawable.img1);
contact.put("name", "李红梅");
contact.put("phone", "15895953456");
// 将联系人添加到联系人列表
contacts.add(contact);
// 创建第2个联系人
contact = new HashMap<>();
contact.put("icon", R.drawable.img2);
contact.put("name", "王晓玲");
contact.put("phone", "13956572345");
// 将联系人添加到联系人列表
contacts.add(contact);
// 创建第3个联系人
contact = new HashMap<>();
contact.put("icon", R.drawable.img3);
contact.put("name", "唐语涵");
contact.put("phone", "15845891234");
// 将联系人添加到联系人列表
contacts.add(contact);
// 创建第4个联系人
contact = new HashMap<>();
contact.put("icon", R.drawable.img4);
contact.put("name", "佟大为");
contact.put("phone", "13934345680");
// 将联系人添加到联系人列表
contacts.add(contact);
// 创建第5个联系人
contact = new HashMap<>();
contact.put("icon", R.drawable.img5);
contact.put("name", "钟小翠");
contact.put("phone", "15890904520");
// 将联系人添加到联系人列表
contacts.add(contact);
// 创建第6个联系人
contact = new HashMap<>();
contact.put("icon", R.drawable.img6);
contact.put("name", "张三丰");
contact.put("phone", "13890985670");
// 将联系人添加到联系人列表
contacts.add(contact);
// 创建第7个联系人
contact = new HashMap<>();
contact.put("icon", R.drawable.img7);
contact.put("name", "刘玉玲");
contact.put("phone", "15895673450");
// 将联系人添加到联系人列表
contacts.add(contact);
// 返回联系人列表
return contacts;
}
}
4. Caja adaptadora personalizada - Persona de contacto
1. Crea una aplicación de Android
- Cree una aplicación de Android basada en
Empty Activity
-ContactList
- Haga clic en el botón [finalizar]
2. Copie la imagen de fondo al directorio dibujable.
- Copiar la imagen de fondo al
drawable
directorio
3. Archivo de recursos de cadena
- Archivo de recursos de cadena -
string.xml
<resources>
<string name="app_name">联系人(采用自定义适配器)</string>
<string name="icon">图标</string>
<string name="name">姓名</string>
<string name="phone">电话</string>
</resources>
3. Archivo de recursos de diseño principal actividad_main.xml
- archivo de recursos de diseño
activity_mian.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:background="@drawable/background"
android:padding="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_icon"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_weight="0.5"
android:text="@string/icon"
android:textColor="#000000"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/name"
android:textColor="#000000"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:text="@string/phone"
android:textColor="#000000"
android:textSize="20sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:background="#aaaaaa" />
<ListView
android:id="@+id/lv_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
- Ver efecto de vista previa
5. Cree una plantilla de elemento de lista de contactos
- Crear plantilla de elemento de lista de contactos -
contact_list_item.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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginRight="10dp"
android:scaleType="fitXY"
android:src="@drawable/img1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#0000ff"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="70dp"
android:textColor="#555555"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
6. Cree una clase de entidad de contacto
- Clase de entidad de contacto -
Contact
package net.xyx.contact_list;
/**
* 功能:
* 作者:肖宇轩
* 日期:2022年11月28日
*/
public class Contact {
private int icon;//联系人图片
private String phone;//联系人电话
public String name;//联系人姓名
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Contact{" +
"icon=" + icon +
", phone='" + phone + '\'' +
", name='" + name + '\'' +
'}';
}
}
7. Crea un adaptador de contactos
- Crear adaptador de contacto -
ContactAdapter
- Heredar el adaptador base e implementar cuatro métodos abstractos vacíos
- declarar variables
- Crear constructor
8. Función de implementación de la clase de interfaz principal
- Clase de interfaz principal -
MainActivity
- Método para obtener el número de elementos de la lista:
getCount()
- Obtener identificador de elemento de lista -
getItem()
- Obtener método de identificador de elemento de lista -
getItrmld()
- Obtener método de visualización de elementos de lista -
getView()
- Dificultad
8. Funciones de la interfaz principal
- Clase de interfaz principal -
MainActivity
- declarar variables
- Obtener la instancia de control por identificador de recurso
- Cree un método para obtener una lista de contactos -
getContacts()