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>