现在的位置: 首页 > 综合 > 正文

Android中ListView的用法案例

2018年04月30日 ⁄ 综合 ⁄ 共 8184字 ⁄ 字号 评论关闭

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);

 

抱歉!评论已关闭.