使用ListView实现如下效果
1.运行效果图
2.训练目标
1)掌握ListView控件的使用
2)掌握如何自定义Adapter的使用
3.主要步骤
1)创建程序
ListView程序对应的布局文件activity_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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="bzu.edu.cn.listviewdemo.MainActivity">
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
2)创建Item的布局
创建ListView的条目,在res目录下创建一个list_item.xml文件,指定Item的布局,图形化界面,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_margin="5dp"/>
<TextView
android:id="@+id/tv_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:paddingLeft="15dp"
android:layout_marginLeft="20dp"
android:textSize="18sp"
android:hint="我是ListView的Item布局"/>
</RelativeLayout>
3)编写界面交互代码
在MainActivity里面编写适配ListView的代码,用于实现将一个字符数组捆绑到ListView上显示,由于要适配图片,因此要在drawable目录下添加相应的图片资源。MyBaseAdapter类是用来适配数据到ListView的,它继承自BaseAdapter并实现了getCount(),getItem(),getItemId(),getView()这4个方法。其中,getView()方法中调用了View.inflate()方法,这个方法的作用是将list_item布局找出来。只有在找出了布局之后,才能调用findViewById()的方法去找到控件。具体代码如下:
package bzu.edu.cn.listviewdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ListView listView;
//需要适配的数据
private String[] names={"Apple","Banana","Cherry","Grape","Mango","Orange","Pear","Pineapple","Strawberry","Watermelon"};
//图片集合
private int[] pictures={R.drawable.apple_pic,R.drawable.banana_pic,R.drawable.cherry_pic,R.drawable.grape_pic,R.drawable.mango_pic,R.drawable.orange_pic,R.drawable.pear_pic,R.drawable.pineapple_pic,R.drawable.strawberry_pic,R.drawable.watermelon_pic};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化ListView控件
listView=(ListView)findViewById(R.id.lv);
//创建一个adapter的实例
MyBaseAdapter adapter=new MyBaseAdapter();
//设置adapter
listView.setAdapter(adapter);
}
//创建一个类继承BaseAdapter
class MyBaseAdapter extends BaseAdapter{
//得到Item的总数
public int getCount(){
//返回ListView Item条目的总数
return names.length;
}
//得到Item代表的对象
public Object getItem(int position){
//返回ListView Item条目代表的对象
return names[position];
}
//得到Item的id
public long getItemId(int position){
//返回ListView Item的id
return position;
}
//得到Item的View视图
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//将list_item.xml文件找出来并转换成View对象
View view=View.inflate(MainActivity.this,R.layout.list_item,null);
//找到list_item.xml中创建的TextView
TextView textView=(TextView)view.findViewById(R.id.tv_list);
textView.setText(names[position]);
ImageView imageView=(ImageView)view.findViewById(R.id.image);
imageView.setBackgroundResource(pictures[position]);
return view;
}
}
}