[英]overriding Adapter.getView
我是Android編程的新手,並使用Adapters(對於ListView
)執行第一步。
覆蓋Adapter.getView
我經常看到這樣的事情:
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.table_row, null);
} else {
itemView = convertView;
}
// play with itemView
return itemView;
}
我的問題是反對這一點:
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = super(position, convertView, parent);
// play with itemView
return itemView;
}
這似乎對我有用,但我確信我有一個很重要的一點:D
感謝您閱讀並抱歉我的英語不好......
您可以使用
View itemView = super(position, convertView, parent);
如果只是從“即用型”適配器(不是BaseAdapter
) BaseAdapter
,比如SimpleAdapter
或ArrayAdapter
,因為它們已經有了getView()
。
看看它們: http : //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361 for適用於SimpleAdapter的ArrayAdapter和http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113 。
如果你從BaseAdapter
派生,你將不得不BaseAdapter
實現整個方法,正如你在第一個例子中描述的那樣,因為它沒有開箱即用的內容: http : //grepcode.com/file/repository.grepcode .COM / JAVA /轉/ com.google.android /安卓/ 4.0.4_r2.1 /安卓/空間/ BaseAdapter.java#BaseAdapter
適配器的getView(..)
方法可以有多種方式。 唯一的問題是,哪一個最有效?
一篇有趣的文章,讓您更加詳細地了解ListView: http : //lucasr.org/2012/04/05/performance-tips-for-androids-listview/
如果你的意思是這段代碼:
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.table_row, null);
} else {
itemView = convertView;
}
你似乎沒必要:這段代碼允許Android創建相對較少數量的單元格(等於屏幕上可見的單元格數量 - ),然后“回收”這些單元格 - 一遍又一遍地使用它們當用戶滾動列表時,而不是為數組中的每個對象創建一個單元格。 這將幫助您:
保存內存 - 因為您沒有為數組中的每個元素創建視圖
節省CPU使用率 - 從xml文件創建視圖對象(“膨脹”)是相對昂貴的任務,對陣列中的每個項目執行此操作可能會阻塞UI線程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.