ListView列表控件
Android中的列表控件非常灵活,可以自定义每一个
列表项,实际上每一个列表项就是一个View,在Android定义
了3个列表控件:ListView、ExpandableListView和Spinner,
其中Spinner就是在Windows中常见的下拉列表框。
列表的显示需要三个元素:
1.View 用来展示数据的view
2.适配器 用来把数据映射到view上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
实战案例 实现微信好友列表
需要源码的请在文章下面留言亲
一、java主函数
package com.example.listview;
import java.util.ArrayList;
import java.util.List;
import com.example.listview.adapter.FriendAdaper;
import com.example.listview.model.FriendModel;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class FriendListActivity extends Activity
{
// ListView控件
private ListView main_listView;
// 绑定数据适配器
private FriendAdaper mAdaper;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.view_mainview);
main_listView=(ListView) findViewById(R.id.main_listView);
mAdaper=new FriendAdaper(this, getData());
//与ListView建立数据通信
main_listView.setAdapter(mAdaper);
}
private List<FriendModel> getData()
{
List<FriendModel> list=new ArrayList<FriendModel>();
// 好友数据共7个好友数据
FriendModel friend1=new FriendModel();
friend1.setIv_photo(R.drawable.show04);
friend1.setTv_01("西西");
friend1.setTv_02("你是我的贝贝,我是你的舒舒");
FriendModel friend2=new FriendModel();
friend2.setIv_photo(R.drawable.show01);
friend2.setTv_01("小南");
friend2.setTv_02("我还有什么理由可以回到以前?");
FriendModel friend3=new FriendModel();
friend3.setIv_photo(R.drawable.show02);
friend3.setTv_01("城池");
friend3.setTv_02("做你坚固的壁垒");
FriendModel friend4=new FriendModel();
friend4.setIv_photo(R.drawable.show03);
friend4.setTv_01("阿德哈");
friend4.setTv_02("嘻嘻哈哈,快快乐乐");
FriendModel friend5=new FriendModel();
friend5.setIv_photo(R.drawable.show05);
friend5.setTv_01("阿斯顿");
friend5.setTv_02("给我一个不伤心的理由");
FriendModel friend6=new FriendModel();
friend6.setIv_photo(R.drawable.show01);
friend6.setTv_01("小南");
friend6.setTv_02("我还有什么理由可以回到以前?");
FriendModel friend7=new FriendModel();
friend7.setIv_photo(R.drawable.show02);
friend7.setTv_01("城池");
friend7.setTv_02("做你坚固的壁垒");
list.add(friend1);
list.add(friend2);
list.add(friend3);
list.add(friend4);
list.add(friend5);
list.add(friend6);
list.add(friend7);
return list;
}
}
二、数据适配器
package com.example.listview.adapter;
import java.util.List;
import com.example.listview.R;
import com.example.listview.model.FriendModel;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class FriendAdaper extends BaseAdapter
{
//来获取position数据
private List<FriendModel> mData;
//没有上下文所以创建一个context
private Context context;
// 创建一个构造方法来接收 mData和context
public FriendAdaper(Context context,List data){
this.mData=data;
this.context=context;
}
//决定列表item显示的个数
@Override
public int getCount()
{
return mData.size();
}
//根据position获取对应item数据
@Override
public Object getItem(int position)
{
return mData.get(position);
}
//获取对应position的item的id
@Override
public long getItemId(int position)
{
return position;
}
//创建列表item的视图
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
//创建的view返回值,获取listView的布局
View view=View.inflate(context, R.layout.item_listview, null);
// 获取item相应的数据对象
FriendModel friend= mData.get(position);
// 初始化view
ImageView iv_photo=(ImageView) view.findViewById(R.id.iv_photo);
TextView tv_01=(TextView) view.findViewById(R.id.tv_01);
TextView tv_02=(TextView) view.findViewById(R.id.tv_02);
// 数据绑定到view
iv_photo.setImageResource(friend.getIv_photo());
tv_01.setText(friend.getTv_01());
tv_02.setText(friend.getTv_02());
//返回绑定完数据的view
return view;
}
}
三、数据类,为了创建存放数据的对象
package com.example.listview.model;
//创建一个数据类,便于建立数据对象存放数据
public class FriendModel
{
// 图片的资源ID
private int iv_photo;
// 昵称
private String tv_01;
// 个性签名
private String tv_02;
public int getIv_photo()
{
return iv_photo;
}
public void setIv_photo(int iv_photo)
{
this.iv_photo = iv_photo;
}
public String getTv_01()
{
return tv_01;
}
public void setTv_01(String tv_01)
{
this.tv_01 = tv_01;
}
public String getTv_02()
{
return tv_02;
}
public void setTv_02(String tv_02)
{
this.tv_02 = tv_02;
}
}
四、xml布局文件中
主函数加载的布局
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_listView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
ListView布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/iv_photo"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/show04"/>
<TextView
android:id="@+id/tv_01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="小南"
android:layout_toRightOf="@id/iv_photo"
android:layout_centerVertical="true"
android:layout_margin="2dp"/>
<TextView
android:id="@+id/tv_02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="如果回到过去我们有能抓住什么?"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_margin="2dp"/>
</RelativeLayout>