Android ListView adapter使用教程

xiaoxiao2021-02-28  88



android ListView组件使用实在是太频繁了,因此特意制作了Android ListView的详细使用教程,还有和listview配套使用的BaseAdapter以及ArrayAdapter都会在文章后面有讲到,非常的实用。

为了便于理解下面listview的使用方法,我想先让你看下本人的android项目的目录结构是很有必要的,如图。

案例一:首先我们用ListView制作一个简单的联系人列表,没有头像,就只有一个名字,暂时只用了activity_main.xml这一个layout xml文件,请先不考虑其它几个文件。效果如图。

1:首先我们在activity_main.xml这个文件里面定义一个listview标签,用于显示表格数据,代码如下。

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/activity_main"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context="com.baidu.listviewdemo.MainActivity">     <!--添加一个Listview标签-->     <ListView         android:layout_width="match_parent"         android:layout_height="match_parent"         android:id="@+id/myListView">     </ListView> </RelativeLayout>

2:然后我们在对应的MainActivity.java文件里面写方法,给listview添加数据,代码如下,运行之后就是上面图片的效果。

package com.baidu.listviewdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends AppCompatActivity {     private  ListView listView;     String[] phones = new String[] { "Android", "iOS", "WindowsMobile", "Blackberry","YunOS"};     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         listView = (ListView)findViewById(R.id.myListView);         ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,phones);         listView.setAdapter(adapter);     } }

提醒:simple_list_item_1这个是android系统提供的layout,它的相当于listview行对象,phones是一个存有数据的数组,ArrayAdapter会自动给每一行对象添加数据。

案例二:由于上面案例一的listview太过简单,有时候不符合我们的需求,因此我们需要自定义listview的row(行),效果如图。

1:我们将activity_main.xml里面的Listview标签给去除掉,因为我们要自定义新建一个叫list_view.xml的layout文件,新建方法为:选择layout文件夹->右键new->xml->layout xml file,新建之后我们在list_view.xml文件中自定义一个Listview的标签,宽高设置为屏幕大小(match_parent),代码如下。

<?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">     <!--自定义的listview-->     <ListView         android:layout_width="match_parent"         android:layout_height="match_parent"         android:id="@+id/myListView">     </ListView> </LinearLayout>

2:我们再新建一个layout_item.xml的layout文件,里面自定义两个ImageView和TextView标签,用于在每一行显示头像和名字,代码如下。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:paddingLeft="10dp"     android:layout_width="match_parent"     android:layout_height="match_parent">     <!--显示头像-->     <ImageView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:adjustViewBounds="true"         android:maxWidth="30dp"         android:maxHeight="30dp"         android:layout_gravity="center_vertical"         android:id="@+id/logo_image"         />     <!--显示名称-->         <TextView         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:paddingLeft="10dp"         android:height="44dp"         android:textSize="16dp"         android:gravity="center_vertical"         android:id="@+id/my_text"/> </LinearLayout>

3:自定义一个MyAdapter类,并继承ArrayAdapter类(BaseAdapter也是可以的),实现ArrayAdapter里面所有的方法,代码如下。

package com.baidu.listviewdemo; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class MyAdapter extends ArrayAdapter {     private Context context;     private String[] phones;     //Inflater意思为充气机,就是用于设置每行数据的对象     private LayoutInflater flater;     public MyAdapter(Context context, int resource,String[] phones) {         super(context,resource,phones);         this.context = context;         this.phones = phones;         flater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);     }     @Override     public int getCount() {         return phones.length;     }     @Override     public Object getItem(int position) {         return phones[position];     }     @Override     public long getItemId(int position) {         return position;     }     @Override     public View getView(int position, View convertView, ViewGroup parent) {         if (convertView == null){             //通过flater获取lis行对象             convertView = flater.inflate(R.layout.layout_item,parent,false);         }         //设置头像数据         ImageView imageView = (ImageView)convertView.findViewById(R.id.logo_image);         imageView.setImageResource(R.drawable.ic_account_circle);         //设置名称数据         TextView textView = (TextView)convertView.findViewById(R.id.my_text);         textView.setText(phones[position]);         return convertView;     } }

4:在MainActivity.java中加载我们的listView,这样就会显示我们的联系人列表数据了,代码如下。

package com.baidu.listviewdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends AppCompatActivity {     private  ListView listView;     String[] phones = new String[] { "Android", "iOS", "WindowsMobile", "Blackberry","YunOS"};     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         //setContentView(R.layout.activity_main);         //设置list_view.xml为程序主页面         setContentView(R.layout.list_view);         //获取listview对象         listView = (ListView)findViewById(R.id.myListView);         //自定义adapter         MyAdapter adapter = new MyAdapter(this,R.layout.layout_item,phones);         listView.setAdapter(adapter);         //为每一行添加点击事件         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {             @Override             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                 System.out.println("你选择的手机是:"+phones[position]);             }         });     } }

提示:R.layout.layout_item也是行对象,里面包含了Imageview和TextView两个元素,所以需要作为参数传给ArrayAdapter对象。

来源网站:太平洋学习网,转载请注明出处: http://www.tpyyes.com/a/android/2017/0805/180.html
转载请注明原文地址: https://www.6miu.com/read-62598.html

最新回复(0)