前面我们已经了解到了Listview的最基本用法,是不是觉得只是展示单纯的文字信息比较单调,那我们现在就马上来看listview使用之,自定义适配器,使用这个以后,就可以展示各种各样的数据啦。
先看效果
第一步 新建一个类 继承BaseAdapter 可以看到必须实现四个方法 下面来一一解释
第一个 getCount方法 返回整个list里面数据的个数
第二个getItem方法 返回没一个Item的数据
第三个 getItemId方法 返回每个Item的id
第四个,是最重要的方法getView方法 绘制视图 调用次数由第一个方法决定 返回每个视图
我现在的数据是一张图片和一个字符串
所以 需要一个对象来保存没一个视图的数据
下面是对象类public class Bean {
private String name;
private int resid;
public Bean(String name, int resid) {
this.name = name;
this.resid = resid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getResid() {
return resid;
}
public void setResid(int resid) {
this.resid = resid;
}下面是适配器类package comiptv.example.vincent.listview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
* Created by liliu on 2016/8/25.
*/
public class MyAdapter extends BaseAdapter{
private LayoutInflater mInflater;
List list;
public MyAdapter(Context context,List list) {
mInflater=LayoutInflater.from(context);//得到一个LayoutInfalter对象用来导入布局
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(R.layout.my_listview_item, null);//通过mInflater来加载布局
ImageView iv = (ImageView) convertView.findViewById(R.id.iv);//找到对应的控件
TextView tv = (TextView) convertView.findViewById(R.id.tv);
iv.setImageResource(list.get(position).getResid());//根据position下标来设置控件的内容
tv.setText(list.get(position).getName());
return convertView;
}
}
我们需要使用自定义的适配器需要创建数据源,在这里仍然使用本地数据
下面是MainActivitypublic class MainActivity extends AppCompatActivity {
private ListView lv;
List list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
list=new ArrayList<>();//存储对象的集合
int [] resids={R.mipmap.a1,R.mipmap.a2,R.mipmap.a3,R.mipmap.a4,R.mipmap.a5,
R.mipmap.a6,R.mipmap.a7,R.mipmap.a8,R.mipmap.a9,R.mipmap.a10,};//图片的id数组
for (int i=0;i
Bean bean = new Bean("item" + i, resids[i]);//创建对象存入数据
list.add(bean);//数据存入集合中
}
MyAdapter myAdapter = new MyAdapter(this, list);//新建适配器并且传入数据的集合
lv.setAdapter(myAdapter);//设置适配器
}
下面是适配器中使用到的布局<?xml version="1.0" encoding="utf-8"?>
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:id="@+id/iv"
android:layout_width="200dp"
android:layout_height="200dp"/>
android:id="@+id/tv"
android:textSize="30sp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
好了今天的内容就到这里,后续我会加上网络加载和适配器优化等内容,大家有什么建议在下方留言哦。