安卓學習筆記:ListView的用法
標簽: 安卓學習 安卓學習ListView
ListView顯示列表數據,內容可以簡單的就是一行行的字符串,也可以復雜到每一行數據就是包含特定排版格式的數字、字符串、圖像等的組合。
簡單的純字符串的ListView的使用方法如下:
1.先引用在布局中設計好的ListView組件:
ListView listView=(ListView) findViewById(R.id.list_view_xxx);
2.準備好ListView要使用的字符串數據,由于字符串好多個(一行一行的),所以字符串數據要封裝在ArrayAdapter中:例如:
String[] data={"Apple","Samsung","Huawei","Xiaomi","Oppo"}
ArrayAdapter<String> adatpter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice,data);
3.listview組件使用數據:
listView.setAdapter(adapter);
總結一下:從簡單數據的ListView可以看出:ListView需要的數據必須封裝在ArrayAdapter里面,而ListView怎么顯示數據也不是ListView決定的,而是由這個ArrayAdapter決定。
因此,要實現復雜數據的列表顯示,我們需要做的主要有兩步:
1.定義這個復雜數據
2.定義這個新的ArrayAdapter,當然,新的ArrayAdapter一定派生自ArrayAdapter。
暫停一下,了解一下ArrayAdapter構造函數的三個參數:
new ArrayAdapter(context,resource_id,data)
分別是adapter的上下文,顯示數據的layout和數據。對于字符串等簡單數據,安卓系統內置了一些簡單的布局可以顯示數據,比如上面的:android.R.layout.simple_list_item_single_choice,其他還有什么:android.R.layout.simple_list_item_1等等。
下面就是擴展了:
比如我們要顯示的數據包含:
1.商品圖片
2.商品名稱
3.商品描述
4.商品價格
每一行數據類似手機淘寶的搜索結果一樣:
要把這樣的數據顯示在ListView里面,當讓首先需要定義這樣的一個數據:
public class Commodity{
private String name;
private int resource_id;
private String discription;
private float price;
public Commodity(String name,int resource_id,String discreption,float price){
this.name=name;
this.resource_id=resource_id;
this.discription=discription;
this.price=price;
}
public String getName(){
return name;
}
...此處省略其他類似的getXXX函數
}
第二步,新建一個水果列表類,這個類派生自ArrayAdapter
public class CommodityArrayAdapter extends ArrayAdapter<Commodity> {
private int resourceID; //顯示數據的layout 的id
//注意,類名定義里面定義了這個ArrayAdapter的每一個數據是我們定義的商品類的數據
//接著定義構造函數,顯然應該包含我們上滿總結的三個參數
//其中注意data的定義,要將Commodity類型的數據裝配為列表型里面才可以,簡單類型可以如String[],復雜結構體數據必須借助List類,后面講這個
public CommodityArrayAdapter(Context context,int resource_id,List<Commodity>data){
super(context,resource_id,data);
resourceID=resource_id;
}
//關鍵的一個函數,getView(),是父類的重寫.這個函數負責填寫我們設計的數據顯示頁面(這個頁面就是一個layout,記得上面寫的resource_id這個參數嗎)
@Override
public View getView(int position, View convertView, ViewGroup parent){
Commodity commodity=getItem(position);//這個position就是列表每一個數據的索引位置
View view;
ViewHolder viewHolder;//ViewHolder的用處看:[這里](https://www.jianshu.com/p/a14feb480804)
if(convertView==null){
view = LayoutInflater.from(getContext()).inflate(resourceID, parent, false); //Layout inflation是在android系統中使用的術語,當XML布局資源被解析并轉換成View對象時會用到.
viewHolder = new ViewHolder();
//下面把顯示布局里面的顯示組件綁定到ViewHolder里面
ImageView commodityImage= (ImageView) view.findViewById (R.id.commodity_image);
ViewHolder.commodityName = (TextView) view.findViewById (R.id.commodity_name);
ViewHolder.commodityImage= (TextView) view.findViewById (R.id.commodity_image);
ViewHolder.commodityDiscription= (TextView) view.findViewById (R.id.commodity_discription);
ViewHolder.commodityPrice= (TextView) view.findViewById (R.id.commodity_price);
view.setTag(viewHolder)
}
else{
view=convertView;
viewHolder=(ViewHolder) view.getTag();
}
commodityImage.setImageResource(commodity.getImage());
//..以下雷同
commodityName.setText(commodity.getName());
return view;
}
}
//這里定義一下ViewHolder
class ViewHolder{
ImageView commodityImage;
TextView commodityName;
TextView commodityDiscription;
TextView commodityPrice;
}
所有的數據類型都搞定了。下面需要準備的包括:
1.準備數據,包括文本數據:產品名稱、描述、價格。還有圖片數據,建議保存在res\drawable目錄下,圖片名稱不支持中文
2.設計一個layout,用來顯示一個商品數據。
OK,現在搞定。可以像普通數據那樣的步驟來在ListView中顯示這些數據了。運行結果如下
:
智能推薦
【安卓】ListView
用于展示大量數據,ListView允許用戶上下滑動的方式將屏幕內未顯示的內容滾動顯示出來 ①在布局中加入ListView控件,將寬度和高度都設置成為match_parent,占滿整個布局 activity_main.xml ②修改Main_Activity代碼 ListView中顯示的數據可以從數據庫讀取,也可以視具體情境定, 這里存在data數組里面。數組中的數據無法直接傳給ListView,要...
安卓ListView
ListView 列表視圖是android中最常用的一種視圖組件,它以垂直列表的形式列出需要顯示的列表項。在android中有兩種方法向屏幕中添加列表視圖:一種是直接使用ListView組件創建;另外一種是讓Activity繼承ListActivity實現。下面分別介紹這兩種方法: 一、直接使用ListView組件創建 在布局文件中首先添加ListView 代碼 <?xml version=...
安卓Android學習之handler的基礎用法
總得來說 Handler的主要用途有兩個:(1)、在將來的某個時刻執行消息或一個runnable;(2)把消息發送到消息隊列。 先看效果一:延遲一秒改變文字:點擊按鈕一秒后改變文字 再看效果二:進度條3秒后消失:點擊按鈕后出現進度條,3秒后消失。 talk is cheap,show me the code:...
安卓學習之路-RecyclerView的簡單用法
日常嘮嗑 唔,今天早上想了很多,主要是想自己能不能通過面試得到工作。于是乎就跑到力扣看了看,好吧,我好像對算法啥的還是小白啊,瞬間就有點慌,擔心會被問到(同學告訴我這是一定會問到的),小小的沮喪了一下,不過還是想著,無論如何,遇到困難遇到不會的,那就學吧,抓緊時間學習才是正道啊,一味地抱怨沮喪只會讓自己走歪。 好吧,嘮嗑完了回歸正題。其實RecyclerView我之前有簡單的提一下,但是還是重新來...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...