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"?>
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">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/myListView">
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"?>
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/myListView">
2:我们再新建一个layout_item.xml的layout文件,里面自定义两个ImageView和TextView标签,用于在每一行显示头像和名字,代码如下。<?xml version="1.0" encoding="utf-8"?>
android:paddingLeft="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
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"
/>
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"/>
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/180.html