1. 程式人生 > >Android——繼承SimpleAdapter重寫自己的getView

Android——繼承SimpleAdapter重寫自己的getView

               在上篇Android——ListView實現簡單列表 中,利用SimpleAdapter實現了簡單的列表繫結。在本文中,主要是通過重寫getView方法,來看下adapter內部繫結資料大致是個什麼流程。

            首先加入實現類:

class mTestAdapter extends SimpleAdapter {
		private Context context; /*執行環境*/
		ArrayList<HashMap<String, String>> listItem;  /*資料來源*/
		private LayoutInflater listContainer; // 檢視容器
	    class ListItemView { // 自定義控制元件集合
			public TextView txtName;
		}
	    /*construction function*/
		public mTestAdapter(Context context,    
		            ArrayList<HashMap<String, String>> data, int resource,    
		            String[] from, int[] to) {    
		        super(context, data, resource, from, to);   
		        this.listContainer = LayoutInflater.from(context); // 建立檢視容器並設定上下文
		        this.context=context;  
		        listItem=data;  
		    }    
		/** 
	    * @see android.widget.Adapter#getCount() 
	    */  
	    public int getCount() {  
	  
	         return listItem.size();  
	    }  
	  
	    /** 
	    * @see android.widget.Adapter#getItem(int) 
	    */  
	    public Object getItem(int position) {  
	  
	            return listItem.get(position);  
	    }  
	  
	    /** 
	    * @see android.widget.Adapter#getItemId(int) 
	    */  
	    public long getItemId(int position) {  
	  
	            return position;  
	        }  
	        
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			final int mPosition = position;    
			ListItemView listItemView = null;
			if (convertView == null) {
				convertView = listContainer.inflate(R.layout.listview_item, null);//載入佈局
				listItemView = new ListItemView();
				/*初始化控制元件容器集合*/
				listItemView.txtName=(TextView) convertView
						.findViewById(R.id.name); 
				// 設定控制元件集到convertView
				convertView.setTag(listItemView);
				
			}else{
				listItemView=(ListItemView)convertView.getTag();//利用快取的View
			}
			
			/*
			 * PS:
			 * 		這裡放入對控制元件的屬性及事件進行初始化設定的操作
			 * */
			/*TextView設定點選事件*/
	        listItemView.txtName.setOnClickListener(new View.OnClickListener() {    
	            @Override    
	            public void onClick(View v) {    
	            	Toast.makeText(getApplicationContext(), "點選了"+mPosition, Toast.LENGTH_SHORT).show();
	            }    
	        });  
	      //設定text的值(用position標記來看的更清楚點兒)
	        listItemView.txtName.
	        				setText(mPosition+" "+listItem.get(mPosition).get("ItemName"));
			return convertView;
		}
	}
}

        我們用這個實現類來取代我們之前用的SimpleAdapter.

mTestAdapter listItemAdapter=new mTestAdapter(getBaseContext(),/*指明瞭SimpleAdapter關聯的View的執行環境,也就是當前的Activity*/
				listItem,/*由Map組成的List,在List中的每條目對應ListView的一行,每一個Map中包含的就是所有在from引數中指定的key*/
				R.layout.listview_item,/*定義列表項的佈局檔案的資源ID,該資原始檔至少應該包含在to引數中定義的ID*/
				new String[]{"ItemName"},/*將被新增到Map對映上的Key*/
				new int[] {R.id.name}/*將繫結資料的檢視的Id跟from引數對應,這些被繫結的檢視元素應該全是TextView*/
				);
		//設定介面卡

      之後,run下,看看我們加的toast:

      

相關推薦

Android——繼承SimpleAdapter重寫自己getView

               在上篇Android——ListView實現簡單列表 中,利用SimpleAdapter實現了簡單的列表繫結。在本文中,主要是通過重寫getView方法,來看下adapter內部繫結資料大致是個什麼流程。            首先加入實現類:c

android-繼承BaseAdapter--自己定義適配器,getView運行多次的解決方法

能夠 popu con data ssa baseadapt tracking you idt 定義的getView運行多次的ListView布局: <ListView android:id="@+id/lv_messages"

[chromium][browser][idea][open] 如何重寫自己android.provider.Browser

AOSP的Browser中使用的是系統的android.provider.Browser,如果想自己管理一套收藏夾和訪問歷史,可以試著重寫一下 1、新包中新增frameworks\base\core\java\android\provider中的BrowserContract.java和B

android-繼承BaseAdapter--自定義介面卡,getView執行多次的解決方法

定義的getView執行多次的ListView佈局: <ListView android:id="@+id/lv_messages" android:layout

Android-BaseAdapter中重寫getview的心得以及發現convertView回收的機制

http://blog.csdn.net/pkxiuluo01/article/details/7380974 以前一直在用BaseAdapter,對於其中的getview方法的重寫一直不太清楚。今天終於得以有空來探究它的詳細機制。 下面先講講我遇到的幾個問題: 一.V

Java 繼承重寫、重載

重載 進行 cnblogs 向上造型 用法 編譯 根據 ide 調用 1.類的繼承 1)繼承   父類:所有子類所共有的屬性和行為   子類:子類所特有的屬性和行為 通過extends關鍵字來實現類的繼承 子類(Sub class)可以繼承父類(Super class)的

Java多態機制和繼承重寫重載

htm uil 不同的 運行期 表現 決定 this targe 程序 關於Java中多態機制 http://www.cnblogs.com/chenssy/p/3372798.html 這篇博文講的很透徹 大體意思是 多態定義: 多態就是指程序中定義的引用變量所指向的具體

慕課網Java入門第二季6.1 達達租車系統,使用到繼承重寫、多態、toString函數

ati next println 構造方法 static class days 慕課網 mage 為了方便理解,畫了個UML圖,可以參考一下為了方便理解,畫了個UML圖,可以參考一下 定義Car類型:載人+載貨 public class Car { int id;

java知識點回顧——繼承重寫、重載、多態

extends 方法 per class 相同 重載 實現 修飾 等級 1、繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。修飾符 class 子類名 extends 父類名super.方法名(參數列表); 2、重寫是子類對父類的允許訪問的方法的實現

android——使用Ijkplayer打造自己的超級電視臺播放軟件

dst sdn player tails roi 播放 axu tps get 圖就不上了。想看效果,直接前往觀看: https://www.pgyer.com/cjdst 參考帖子: http://blog.csdn.net/huaxun66/article/detail

oop繼承重寫筆記一

oop繼承與重寫筆記一父類:public class Animal {int age; //年齡double height; //身高double weight; //體重Animal(){System.out.println("一個動物誕生");}Animal(int age,double height

typeScript(7)--ts面向物件程式設計,繼承重寫

類的繼承 在使用TypeScript這門語言時,一個最重要基本功就是面向物件程式設計,那對類的擴充套件就變的格外重要,擴充套件經常使用的手段就是繼承。 繼承:允許我們建立一個類(子類),從已有的類(父類)上繼承所有的屬性和方法,子類可以新建父類中沒有的屬性和方法。

9屬性和函式的私有化,繼承重寫

在屬性名和方法名前加"__"匿名(私有化),否則是類似C++的公有化 然後只能通過類內的方法去呼叫私有的屬性和方法   繼承: 子類繼承父類的非匿名方法和非匿名類屬性(如若子類為定義__init__()時,會繼承父類的__init__()方法,這樣可以“繼承”__

python繼承重寫init方法--例項

一、 子類不重寫__init__ , 例項化子類時,會自動呼叫父類定義的__init__ 二、 子類重寫了__init__時,例項化子類,就不會呼叫父類已經定義的__init__ 三、為了能使用或擴充套件父類的行為,要顯示呼叫父類的__init__方法,有以下兩種呼叫方式。 1

BAT大咖助力 全面升級Android面試筆記 (自己補充)

https://blog.csdn.net/qq_23575921/article/details/78947051 原文 補充 Android任務棧 singletop(棧頂複用):Android系統內建的書籤應用 singletask(棧內複用):商城首頁,在分頁中點了主頁其他的

Android圖片壓縮,自己編譯libjpeg

之前的部落格提到過關於圖片壓縮的方法: Android 圖片壓縮,Bitmap優化 基於此so庫寫的一個圖片壓縮框架:https://github.com/JavaNoober/Light Android原生的壓縮方法,不在乎兩種:通過設定simpleSize根據圖片尺寸壓縮

C++ 多繼承重寫 不同基類中相同原型的虛擬函式

本篇隨筆為轉載,原文地址: C++多繼承中重寫不同基類中相同原型的虛擬函式。 在C++多繼承體系當中,在派生類中可以重寫不同基類中的虛擬函式。下面就是一個例子: class CBaseA { public:     

繼承重寫方法-電子寵物系統

1 package com.szxs.pet; 2 /** 3 * 父類 :寵物類 4 * @author 5 * 6 */ 7 public class Pet { 8 private String name; // 寵物名字 9 private int h

private方法不能繼承重寫

public class Father { private void f1(){ System.out.println("Father f1()"); } void f2() { System.out.println("Father

(D19)Python-封裝、多型、多繼承重寫

封裝 enclosure 封裝是指隱藏類的實現細節,讓使用者不用關心這些細節 封裝的目的是讓使用者通過儘可能少的方法(或屬性)操作物件 私有屬性和方法: python類中以雙下劃線(’__’)開頭,不以雙下劃線結尾的識別符號為私有成員,