Tabla de contenido
Descripción general de la vista de lista
Documentación de API de vista de lista
Vista de lista Cuatro elementos
Documentación de la API del adaptador de matriz
Constructor de adaptador de matriz
Descripción de parámetros del quinto método de construcción.
Ejemplo específico: lectura de poemas antiguos
Cree una aplicación de Android basada en la plantilla de actividad vacía - ReadAncientPoetry
Copie la imagen de fondo en el directorio dibujable
Abra el archivo de recursos de cadena strings.xml e ingrese el código:
Abra el archivo de recursos de diseño principal activity_main.xml
Cree una nueva plantilla de elemento de lista de poesía poema_lista_elemento.xml e ingrese el código
Abra la clase de interfaz principal: código de entrada MainActivity
Inicie la aplicación para ver el efecto.
Modifique la interfaz de contenido para mostrar el contenido de poemas antiguos.
Inicie la aplicación para ver el efecto:
teoría:
Descripción general de la vista de lista
La vista de lista (ListView) hereda la vista de lista abstracta (AbsListView), que a su vez hereda la vista de adaptador (AdapterView). Las vistas de adaptador tienen una característica común, que es usar adaptadores para enlazar fuentes de datos y mostrar controles.
Documentación de API de vista de lista
https://developer.android.google.cn/reference/android/widget/ArrayAdapter?hl=en
Vista de lista Cuatro elementos
elemento | ilustrar |
---|---|
control de lista | Mostrar múltiples opciones para que el usuario elija |
adaptador | adaptador de matriz, adaptador simple, adaptador de cursor, adaptador base |
fuente de datos | Arrays, ArrayLists, Cursores... |
plantilla de elemento de lista | Recursos de la plataforma, definidos por el usuario |
Cuatro elementos de la vista de lista: control de lista, adaptador, plantilla de elemento de lista y origen de datos
Cuatro adaptadores comunes
Vista de lista (ListView), que es un nieto de AdapterView, une la fuente de datos a través del adaptador como un puente de viga
adaptador | significado |
---|---|
ArrayAdapter | adaptador de matriz |
Adaptador simple | adaptador sencillo |
Adaptador de cursor simple | Adaptador de cursor simple |
BaseAdapter | adaptador base |
Documentación de la API del adaptador de matriz
https://developer.android.google.cn/reference/android/widget/ArrayAdapter?hl=en
Constructor de adaptador de matriz
El adaptador de matriz proporciona métodos de construcción sobrecargados 6. Usaremos el quinto método en los siguientes casos.
Descripción de parámetros del quinto método de construcción.
Ejemplo específico: lectura de poemas antiguos
Crear una aplicación de Android basada en Empty Activity
una plantilla - ReadAncientPoetry
Copie la imagen de fondo en drawable
el directorio.
Abrir archivo de recursos de cadenastrings.xml输入代码:
Código específico:
<resources> <string name="app_name">Leer poemas antiguos</string> <string name="back">Volver al contenido</string> <string-array name="titles"> <item>Pensamientos de una noche tranquila< /item> <item>Subiendo a la Torre Cigüeña</item> <item>Acacia</item> <item>Escuchando el piano</item> <item>Subiendo al Leyouyuan</item> <item>Chaofa Baidicheng</ item > <item>Lluvia nocturna de Bashan</item> <item>Canción de Weicheng</item> <item>Lluvia feliz en una noche de primavera</item> <item>Liliyuan Shangcao</item> <item>Ducha</item > </matriz-de-cadenas> <matriz-de-cadenas nombre="autores"> <item>Tang·Li Bai</item> <item>Tang·Wang Zhihuan</item> <item>Tang·Wang Wei</item> <item>Tang·Liu Changqing</item> <item>Tang·Li Shangyin</item> <item>Tang·Li Bai</item> <item>Tang·Du Mu</item> <item>Tang·Wang Wei</item> <item>Tang·Du Fu</item> <item>Tang·Bai Juyi</item> <item>Song·Lu You</item> </string-array> <string-array name="contents"> <item>Luz de luna frente a la cama,\nsospechosa de estar en el suelo Frost. \nMira hacia la luna brillante,\nMira hacia abajo y piensa en tu ciudad natal. </item> <item>El sol está al final de la montaña,\nEl río Amarillo desemboca en el mar. \nSi quieres ver mil millas,\n ve a un nivel superior. </item> <item>Los frijoles rojos nacen en el país del sur,\nLlega la primavera y envía algunas ramas. \nPuedes elegir más,\nEsta cosa es la más enferma de amor. </item> <item>Ling Ling Seven Strings,\nEscucha el viento y el frío en el pino. \nAunque las viejas melodías son amor propio,\nmuchas personas no las tocan hoy en día. </item> <item>Xiang Wan se sintió mal,\nmanejó hasta Guyuan. \nEl sol poniente es infinitamente bueno,\nEstá cerca del anochecer. </elemento> <elemento> Chaoci Baidi entre las nubes de colores,\nMiles de millas de Jiangling serán devueltas en un día. \nLos simios a ambos lados del estrecho no pueden dejar de llorar,\nEl bote ligero ha pasado las Diez Mil Montañas. </item> <item>No hay fecha límite para su regreso, \nLa lluvia nocturna de Bashan se eleva estanque de otoño. \n ¿Por qué cortar juntas las velas de la ventana oeste, \n sino hablar de la lluvia nocturna en Basán? </elemento> <item>La lluvia de la mañana en Weicheng es ligera y el polvo es ligero,\nLas casas de huéspedes son verdes y los sauces son nuevos. \nTe aconsejo que bebas más vino, \nNo hay ningún viejo amigo en el oeste de Yangguan. </item> <item>La buena lluvia conoce la estación, cuando llega la primavera. \nInfiltrarse en la noche con el viento, humedecer las cosas en silencio. \nLos caminos salvajes y las nubes están oscuros, pero los barcos fluviales y las hogueras están solos. \nLugar húmedo rojo de Xiao Kan, ciudad oficial de Hua Chongjin. </item> <item>Li Liyuan está en la hierba, tiene un año y un año. \nEl fuego salvaje es interminable y la brisa primaveral sopla de nuevo. \nFar Fang invade el camino antiguo, y el verde claro conecta la ciudad árida. \nDespide a Wang Sun de nuevo, lleno de amor. </item> <item>Cuando mueras, sabrás que todo está vacío,\npero, lamentablemente, Kyushu no será el mismo. \nWang Shibei estableció el Día de las Planicies Centrales, \nnunca se olvidarán los sacrificios familiares para decirle a Nai Weng. </item> </string-array> </resources>
Abra el archivo de recursos de diseño principalactivity_main.xml
Código específico:
<?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>
Nueva plantilla de elemento de lista de poesía poem_list_item.xml并输入代码
Código específico:
<?versión xml="1.0" codificación="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv_poem_title " android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:minHeight="80dp" android:textColor="#0000ff" android:textSize="25sp" />
Abra la clase de interfaz principal - MainActivity输入代码
Código específico:
paquete net.zyt.read_ancient_poetry; importar androidx.appcompat.app.AppCompatActivity; importar android.content.Intent; importar android.os.Bundle; importar android.view.View ; importar android.widget.AdapterView;; importar android.widget. ListView; importar android.widget.Toast; clase pública MainActivity extiende AppCompatActivity { private ListView lvPoemTitle;//lista de títulos de poesía control-display private ArrayAdapter<String> adaptador;//array adaptador-puente private String[] títulos;//título de poesía array - fuente de datos @Override protected void onCreate(Bundle SavedInstanceState) { super.onCreate(savedInstanceState); //usar el archivo de recursos de diseño para establecer la interfaz de usuario setContentView(R.layout.activity_main); //Obtenga la instancia de control a través del identificador de recursos lvPoemTitle=findViewById(R.id.lv_poem_title); //Inicialice la matriz de títulos de poemas antiguos como la fuente de datos de la lista de control titles=getResources( ).getStringArray( R.array.titles); //Agregue un número de serie al título del poema para (int i=0; i<titles.length;i++){ titles[i]=(i+1)+ "."+titles[i]; } //Cree un adaptador de matriz como un puente que conecte el control de lista y el adaptador de origen de datos=new ArrayAdapter<>( this,//context-current window R.layout.poem_list_item,// list item template-custom design resource titles// Data source - string data group ); //Establecer el adaptador para el control de lista lvPoemTitle.setAdapter(adapter); //registrar elemento de escucha de clics para control de lista lvPoemTitle.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { Toast.makeText(MainActivity.this,"Has elegido un poema antiguo[" +títulos [posición]+"]",Toast.LENGTH_SHORT).show(); //Crear intento para realizar el salto Intento intento=nuevo Intento(MainActivity.this,ContentActivity.class); //Transportar datos a través del intento (lista seleccionada item position) intent.putExtra("position",position); //Inicie la clave principal de destino de acuerdo con el intent startActivity(intent); } }); } }
Inicie la aplicación para ver el efecto.
Crear interfaz de contenido
Cree una interfaz para mostrar el contenido de poemas antiguos basada en plantillasContentActivity
Abra el archivo de recursos de diseño de la interfazcontent_activity.xml输入代码:
Código específico:
<?versión xml="1.0" codificación="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:paddingRight="10dp" 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" androide:layout_weight="1" android:gravity="center_vertical" androide: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" /> <Botón 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>
Modifique la interfaz de contenido para mostrar el contenido de poemas antiguos.
Abra la interfaz de contenidoContentActivity
Código específico:
paquete net.zyt.read_ancient_poetry; importar androidx.appcompat.app.AppCompatActivity; importar android.content.Intent; importar android.os.Bundle; importar android.view.View; importar android.widget.TextView; clase pública ContentActivity extiende AppCompatActivity { private TextView tvTitle;//etiqueta de título private TextView tvAuthor;//etiqueta de autor private TextView tvContent;//etiqueta de contenido private String[] títulos;//matriz de título private String[] autores;//matriz de autor private String[] contenidos; //Content array @Override protected void onCreate(Bundle SavedInstanceState) { super.onCreate(savedInstanceState); //Usar el archivo de recursos de diseño para configurar la interfaz de usuario setContentView(R.layout.activity_content); //Obtenga la instancia de control a través del identificador de recurso tvTitle=findViewById(R.id.tv_title); tvAuthor=findViewById(R.id.tv_author); tvContent=findViewById(R.id.tv_content ); //Obtenga la intención del salto de ventana Intento intent=getIntent(); //Juzgue si el intento está vacío if (intent!=null){ //Obtenga los datos transportados por el intento int position=intent.getIntExtra(" position",0); //Obtener una matriz de títulos de poemas antiguos titles=getResources().getStringArray(R.array.titles); //Obtener una matriz de autores de poemas antiguos author=getResources().getStringArray(R.array .autores); //Obtener etiquetas de contenido de poemas antiguos contents=getResources().getStringArray (R. array.contents); //Establece el texto de la etiqueta del título tvTitle.setText(titles[position]); //Establece el texto de la etiqueta del autor tvAuthor.setText(authors[position]); //Establece el texto de la etiqueta del contenido tvContent.setText(contents[position]) ; } } public void doBack(Ver vista){ finish();//Cerrar la ventana actual } }