ListView:
在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理,并写了个小例子,如下图。
想实现列表的显示,需要三个元素:
1.ListView 用来展示列表的数据,直观来说就是一个存放数据行的容器,一般定义在布局文件中。(只有通过它才能把数据给显示到屏幕上来)
2.适配器 用来把数据按照指定格式映射到ListView上得中介。(可以看做是ListView和数据之间连接的桥梁)
3.数据 具体的将被映射的字符串,图片,组件等等。。。(不要把艳照映射上来喔。。。)
接下来,跟我这我一步步实现:
第一步:先创建一个布局文件,并且指定一个ListView,id为home_lv_msgList
<?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="fill_parent" android:orientation="vertical" android:background="@drawable/send_content_bg" > <!-- 标题栏部分 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/send_title_bg" > <ImageButton android:id="@+id/home_iv_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_edit" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="10dip" /> <TextView android:id="@+id/home_tv_showName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="12345" android:textColor="#343434" android:textSize="20sp" android:layout_centerInParent="true" /> <ImageButton android:id="@+id/home_btn_refreshBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dip" android:background="@drawable/btn_refresh" /> </RelativeLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 微博信息展示部分 --> <ListView android:id="@+id/home_lv_msgList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="@drawable/divider" android:dividerHeight="2dip" android:background="#BBFFFFFF" android:cacheColorHint="#00000000" android:fastScrollEnabled="true" android:focusable="true" android:layout_margin="0dip" android:layout_above="@+id/home_menuLayout" > </ListView> <!-- 进度条 --> <LinearLayout android:id="@+id/home_loadLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:visibility="invisible" android:layout_centerInParent="true" > <ProgressBar android:id="@+id/home_loading" android:layout_width="31dip" android:layout_height="32dip" android:layout_gravity="center" style="@style/progressStyle" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在载入" android:textSize="12dip" android:textColor="#9c9c9c" android:layout_gravity="center" android:layout_below="@+id/home_loading" /> </LinearLayout> <!-- 底部菜单部分 --> <LinearLayout android:id="@+id/home_menuLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="@drawable/menu_bg1" android:layout_alignParentBottom="true" android:gravity="bottom" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <ImageButton android:id="@+id/home_ib_homepage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_home" android:layout_centerInParent="true" /> </RelativeLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <ImageButton android:id="@+id/home_ib_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_message" android:layout_centerInParent="true" /> </RelativeLayout> <RelativeLayout android:id="@+id/home_myrecordLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <ImageButton android:id="@+id/home_ib_myrecord" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_myrecord" android:layout_centerInParent="true" /> </RelativeLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <ImageButton android:id="@+id/home_ib_tail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_tail" android:layout_centerInParent="true" /> </RelativeLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <ImageButton android:id="@+id/home_ib_more" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_more" android:layout_centerInParent="true" /> </RelativeLayout> </LinearLayout> </RelativeLayout> </LinearLayout>
第二步:定义个适配器,名称为WeiboAdapater
getCount():用来指定要显示的列表有几行
Object getItem(int position):获取某一行的数据
long getitemId(int position):获取某一行的行标
getView:用来展现数据行
//微博列表adapater public class WeiboAdapater extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return weiboList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return weiboList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { asyncImageLoader=new AsyncImageLoader(); convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.weibolist, null); wblist_userIcon=(ImageView) convertView.findViewById(R.id.wblist_userIcon); wblist_userName=(TextView) convertView.findViewById(R.id.wblist_userName); wblist_time=(TextView) convertView.findViewById(R.id.wblist_time); wblist_text=(TextView) convertView.findViewById(R.id.wblist_text); WeiBoInfo wb=weiboList.get(position); if(wb!=null){ convertView.setTag(wb.getId()); wblist_userName.setText(wb.getUserName()); wblist_time.setText(wb.getTime()); wblist_text.setText(wb.getText(),TextView.BufferType.SPANNABLE); Drawable cachedImage = asyncImageLoader.loadDrawable(wb.getUserIcon(),wblist_userIcon, new com.sina.bean.AsyncImageLoader.ImageCallback(){ public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl) { imageView.setImageDrawable(imageDrawable); } }); if(cachedImage==null){//如果没有获取缓存图片 wblist_userIcon.setImageResource(R.drawable.usericon); }else{ wblist_userIcon.setImageDrawable(cachedImage); } } return convertView; } }
定义weibolist.xml文件来展现某一行的数据如何展示:
<?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="wrap_content" android:orientation="horizontal" > <!-- 微博头像展示部分 --> <ImageView android:id="@+id/wblist_userIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/usericon" android:layout_margin="8dip" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:layout_marginRight="5dip" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/wblist_userName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" android:textColor="#424952" android:layout_alignParentLeft="true" android:text="123" /> <TextView android:id="@+id/wblist_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:textColor="#f7a200" android:textSize="12sp" android:text="456" /> </RelativeLayout> <TextView android:id="@+id/wblist_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#424952" android:textSize="13sp" android:layout_marginTop="4dip" android:text="6789" /> <ImageView android:id="@+id/wblist_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dip" /> </LinearLayout> </LinearLayout>
第三步:ListView,适配器,数据,三者进行绑定的操作:
WeiboAdapater adapater=new WeiboAdapater(); ListView msgList=(ListView) this.findViewById(R.id.home_lv_msgList); msgList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) { //传递tag进入详细界面 Intent intent=new Intent(); intent.setClass(HomeActivity.this, ViewActivity.class); Bundle b=new Bundle(); b.putString("key", view.getTag().toString()); intent.putExtras(b); startActivity(intent); } }); msgList.setAdapter(adapater);