安卓学习笔记(一) 用适配器适配ListView和ArrayList——安卓第二天,安卓listview
安卓学习笔记(一) 用适配器适配ListView和ArrayList——安卓第二天,安卓listview
列表的显示需要三个元素:
1.ListVeiw 用来展示列表的View。
2.适配器 用来把数据映射到ListView上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
destination: 制作listview
question1:为什么要适配器?
answer1:ListView是一连串的“条子”,但是在布局的时候无法确定要布局几个条子,所以只写一个ListView。之后用适配器让每个数据都对应一个条子出来。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为
是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
数据库还没看先不管SimpleCursorAdapter,ArrayAdapter比较弱,也不说了,下面只说SimpleAdapter.
分成三步走:
第一步:造数据
这个怎么个造法根据需求来,最后存入一个像ArrayList<HashMap<String,String>>的东西里去。
第二步:适配器上场
SimpleAdapter mSchedule = new SimpleAdapter(context, //activity的context
getlist(intinum),//数据来源 ,第一步造出来的数据
R.layout.my_listitem,//ListItem的XML实现,对应一下布局
new String[] {"ItemTitle", "ItemText"},//动态数组与ListItem对应的子项
new int[] {R.id.linearText1,R.id.linearText2});//ListItem的XML文件里面的两个TextView ID
这样理解:从数据里找到String[]的一个对应项,得到真正要显示的数据,
显示在哪里呢?显示在new int[]的那两个地方。
显示在哪个ListView里呢?去R.layout.XX那里去找。
最后放在context对应的activity里。
第三步
//添加并且显示
list.setAdapter(mSchedule);
讲完了,周末大放送,学长说BaseAdapter也很好用,我还不清楚它和前几个的关系。用起来有个不同。
-----------
今天看博文,好像和其他Adapter也是一个并列的关系 ——140718更新
-----------
三步走
第一步:找个类继承BaseAdapter 和 造数据(这个不用说和上面一样)
成了这个样子
class a extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
return null;
}
}
其中我们主要要写getCount()和getView这两个方法。
getCount得到数据数目。getView得到每一“条”的样子
第二步:适配器上场
public View getView(int position, View convertView, ViewGroup parent) {
<span > </span>
<span > </span>LayoutInflater mInflater = LayoutInflater.from(context);
<span > </span>ViewHolder holder = null;//这里是一窝蜂绑定
<span > </span>if (convertView == null) {
<span > </span>
<span > </span>holder=new ViewHolder();
<span > </span>
<span > </span>convertView = mInflater.inflate(R.layout.vlist2, null);
<span > </span>holder.img = (ImageView)convertView.findViewById(R.id.img);
<span > </span>holder.title = (TextView)convertView.findViewById(R.id.title);
<span > </span>holder.info = (TextView)convertView.findViewById(R.id.info);
<span > </span>holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
<span > </span>convertView.setTag(holder);
<span > </span>
<span > </span>}else {
<span > </span>
<span > </span>holder = (ViewHolder)convertView.getTag();
<span > </span>}
<span > </span>
<span > </span>//这里是把数据送到绑定好的地方
<span > </span>holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
<span > </span>holder.title.setText((String)mData.get(position).get("title"));
<span > </span>holder.info.setText((String)mData.get(position).get("info"));
<span > </span>
<span > </span>holder.viewBtn.setOnClickListener(new View.OnClickListener() {
<span > </span>
<span > </span>@Override
<span > </span>public void onClick(View v) {
<span > </span>showInfo();<span > </span>
<span > </span>}
<span > </span>});
<span > </span>
<span > </span>
<span > </span>return convertView;//大功告成,得到一条,他就是这样一条一条绘制出来的
<span > </span>}
<span > </span>
<span > </span>class ViewHolder {
<span > </span>ImageView img_ObjImg;
<span > </span>TextView txtVw_ObjName;
<span > </span>TextView txtVw_ObjNameContent;
<span > </span>TextView txtVw_ObjDescribe;
<span > </span>}
}
第三步:添加并且显示
list.setAdapter(mSchedule);在“主”类中写MyAdapter adapter = new MyAdapter(context);
setListAdapter(adapter);
一瞬间adapter把所有事情都搞定了。
列表项的一个例子
<?xml version="1.0" encoding="utf-8"?>
<!-- 这是列表项的布局文件,每一行长什么样子,修改这里 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:orientation="horizontal"
android:padding="5dip"
android:paddingBottom="15dp" >
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="20sp" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="110dp"
android:textColor="#000"
android:textSize="18sp" />
</LinearLayout>
<TextView
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginTop="3dp"
android:textColor="#000"
android:textSize="15sp" />
</LinearLayout>
</LinearLayout>
下面是一些关于ListView的tip:
1.如果要曾加或减少条子的数量,直接改数据就好了,然后adapter.notifydatasetchanged(),就自动重新绘制更新。
2.ListView也可以设置监听,类似微信聊天的整个条子的监听。 参阅 这个函数:onItemClick()
相关文章
- 暂无相关文章
用户点评