真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android學(xué)習(xí)筆記:ListView及BaseAdapter使用

ListView是Android中常用的重要組件之一,基本上所有軟件基本都會(huì)使用ListView,所以要對(duì)ListView非常熟悉。

為興平等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及興平網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、興平網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

先看看程序效果圖:

Android學(xué)習(xí)筆記:ListView及BaseAdapter使用

ListView的樣式很多,有純文字型,帶圖片顯示,帶按鈕的等等。本次演示一個(gè)帶圖片的ListView。

①布局文件:

在ListView程序中,布局文件相比其他普通控件會(huì)多出至少一個(gè),其原因是還需要一個(gè)關(guān)于ListView里面內(nèi)容條目的布局文件。

內(nèi)容條目的布局文件 listview_item.xml :



    
    

    
    
    
    

看了代碼應(yīng)該就明白了我上面說(shuō)的ListView內(nèi)容條目的布局指的就是

Android學(xué)習(xí)筆記:ListView及BaseAdapter使用這樣一條條的布局文件

另外一個(gè)布局文件,整個(gè)android程序的總體布局文件 activity_main.xml :


    
    
        
        
        
    

只有一個(gè) 其中scrollbars="vertical"意思是如果條目很多,滾動(dòng)時(shí)會(huì)滾動(dòng)條是垂直的。

②A(yíng)ndroid代碼

MainActivity.java

package com.example.testlistview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.widget.SimpleAdapter;
/**
 * 注意繼承的是ListActivity
 * @author jam
 *
 */
public class MainActivity extends ListActivity {
	
	private List> list;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		list = new ArrayList>();
		Map map1 = new HashMap();
		Map map2 = new HashMap();
		Map map3 = new HashMap();
		
		//三項(xiàng),分別是圖片,大標(biāo)題,內(nèi)容
		map1.put("avatar", R.drawable.add_option);
		map1.put("user_name", "zhangsan");
		map1.put("user_ip", "192.168.1.0");
		
		map2.put("avatar", R.drawable.add_pic);
		map2.put("user_name", "lisi");
		map2.put("user_ip", "192.168.1.1");
		
		map3.put("avatar", R.drawable.ic_launcher);
		map3.put("user_name", "wangwu");
		map3.put("user_ip", "192.168.1.2");

		list.add(map1);
		list.add(map2);
		list.add(map3);

		//使用SimpleAdapter的方法
		/**
		 * 四個(gè)參數(shù)
		 * 第一個(gè)參數(shù)是當(dāng)前的Context
		 * 第二個(gè)參數(shù),是數(shù)據(jù)來(lái)源list
		 * 第三個(gè)第四個(gè)相當(dāng)于鍵值對(duì)的關(guān)系
		 */
/*		setListAdapter(new SimpleAdapter(getApplicationContext(), list,
				R.layout.listview_item, 
				new String[] {"user_name", "user_ip"},
				new int[] {R.id.id_tv_title, R.id.id_tv_desc}));*/
		
		//設(shè)置Adapter
		setListAdapter(new MyBaseAdapter(getApplicationContext(), list));
		
	}

}

其中MyBaseAdapter.java代碼:

package com.example.testlistview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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;

/**
 * 繼承BaseAdapter
 * 相對(duì)于SimpleAdapter來(lái)說(shuō)顯得麻煩,但帶來(lái)了更多好處
 * @author jam
 *
 */
public class MyBaseAdapter extends BaseAdapter {

	private LayoutInflater myInfalater; 
	private List> list;
	
	public MyBaseAdapter(Context context, List> list) {
		super();
		this.list = list;
		myInfalater = LayoutInflater.from(context);
	}

	
	@Override
	public int getCount() {
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		return position;
	}

	@Override
	public long getItemId(int positionId) {
		return positionId;
	}

	//重要的重寫(xiě)方法
	@Override
	public View getView(int position, View convertView, ViewGroup viewGroup) {
		ViewHolder viewHolder;
		if(convertView == null) {
			convertView = myInfalater.inflate(R.layout.listview_item, null);
			viewHolder = new ViewHolder();
			viewHolder.avatar = (ImageView) convertView.findViewById(R.id.id_p_w_picpathview);
			viewHolder.title = (TextView) convertView.findViewById(R.id.id_tv_title);
			viewHolder.desc = (TextView) convertView.findViewById(R.id.id_tv_desc);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}
		
		viewHolder.avatar.setBackgroundResource((Integer) list.get(position).get("avatar"));
		viewHolder.title.setText((CharSequence) list.get(position).get("user_name"));
		viewHolder.desc.setText((CharSequence) list.get(position).get("user_ip"));
		
		return convertView;
	}

	private class ViewHolder {
		ImageView avatar;
		TextView title;
		TextView desc;
	}
	
}

說(shuō)明

BaseAdapter是一個(gè)很常用的Adapter,是一個(gè)抽象類(lèi),需要重寫(xiě)很多方法。

在A(yíng)dapter中先調(diào)用getCount()方法,得到ListView的長(zhǎng)度,根據(jù)這個(gè)長(zhǎng)度逐一繪制ListView的每一行

onvertView相當(dāng)于一個(gè)緩存,開(kāi)始為0,當(dāng)有條目變?yōu)椴豢梢?jiàn),它緩存了它的數(shù)據(jù),后面再出來(lái)的條目只需要更新數(shù)據(jù)就可以了,這樣大大節(jié)省了系統(tǒng)資料的開(kāi)銷(xiāo)

ViewHolder的應(yīng)用 :

View的findViewById()方法也是比較耗時(shí)的,因此需要考慮只調(diào)用一次,之后就用convertView.getTag();方法來(lái)獲得ViewHolder對(duì)象。 

通俗的說(shuō),inflate就相當(dāng)于將一個(gè)xml中定義的布局找出來(lái).

因?yàn)樵谝粋€(gè)Activity里如果直接用findViewById()的話(huà),對(duì)應(yīng)的是setConentView()的那個(gè)layout里的組件.

因此如果你的Activity里如果用到別的layout,比如對(duì)話(huà)框上的layout,你還要設(shè)置對(duì)話(huà)框上的layout里的組件(像圖片ImageView,文字TextView)上的內(nèi)容,你就必須用inflate()先將對(duì)話(huà)框上的layout找出來(lái),然后再用這個(gè)layout對(duì)象去找到它上面的組件。

另外這里有些BaseAdapter相關(guān)資料:

http://www.open-open.com/lib/view/open1339485728006.html

http://android.tgbus.com/Android/tutorial/201104/348009.shtml


網(wǎng)頁(yè)題目:Android學(xué)習(xí)筆記:ListView及BaseAdapter使用
新聞來(lái)源:http://weahome.cn/article/pdsddj.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部