前面我们已经了解到了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<Bean> list;
public MyAdapter(Context context,List<Bean> 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;
}
}我们需要使用自定义的适配器需要创建数据源,在这里仍然使用本地数据
下面是MainActivity
public class MainActivity extends AppCompatActivity {
private ListView lv;
List<Bean> 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<resids.length;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"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/iv" android:layout_width="200dp" android:layout_height="200dp"/> <TextView android:id="@+id/tv" android:textSize="30sp" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
好了今天的内容就到这里,后续我会加上网络加载和适配器优化等内容,大家有什么建议在下方留言哦。
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
